const Joi = require('joi');
const express = require('express');
const app = express();

app.use(express.json());
app.use(express.static('./public'));

const members = [
   {id:1, name: 'Hello Mark'},
   {id:2, name: 'Hello Jhon'},
   {id:3, name: ' Hello Jessica'},
];

app.get('/', (req, res) => {
   res.send('Hello');
});

app.get('/api/members', (req, res) => {
   res.send(members);
});

app.post('/api/members', (req, res) => {
   const {error} = validateMember(req.body);
   if (error) return res.status(400).send (error.details[0].message);

   const member = {
      id: members.length + 1,
      name: req.body.name
   };
   members.push(member);
   res.send( member);
});

app.put('/api/members/:id', (req,res) => {
   const member = members.find(c => c.id === parseInt(req.params.id));
   if(!member) return res.status(404).send('Hello Stranger');

   const {error} = validateMember(req.body);

   if (error) return res.status(400).send (error.details[0].message);
   
   member.name = req.body.name;
   res.send(member);
});


function validateMember(member) {
   const schema = {
      name: Joi.string().min(3).required()
   };
   return Joi.validate(member, schema);
}


app.delete('/api/members/:id', (req,res) => {
   // look up the member
   const member = members.find(c => c.id === parseInt(req.params.id));
   if(!member) return res.status(404).send('The member with the given ID given is incorrect');
   // not existing, return 404
   //delete
   const index = members.indexOf(member);
   members.splice(index, 1);
   
   res.send(member);
});


app.get ('/api/members/:id', (req,res) => {
   const member = members.find(c => c.id === parseInt(req.params.id));
   if(!member) return res.status(404).send('Hello Stranger');
   res.send(member);
});

const port = process.env.PORT || 4000;

app.listen(port, () => console.log(`listening on port ${port}...`));