const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const PORT = 8000;
const dotenv = require('dotenv');
dotenv.config();
const MongoClient = require('mongodb').MongoClient;
const connectionString = process.env.MONGODB_URI;

MongoClient.connect(connectionString, { useUnifiedTopology: true }).then(
  (client) => {
    console.log('Connected to Database');
    const db = client.db('star-wars-quotes');
    const quotesCollection = db.collection('quotes');
    app.listen(PORT, () => {
      console.log(`The server is now running on port ${PORT}`);
    });
    app.set('view engine', 'ejs');
    // be sure to place body-parser BEFORE your CRUD handlers
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(express.static('public'));
    app.use(bodyParser.json());

    //All handlers here
    app.get('/', (request, response) => {
      db.collection('quotes')
        .find()
        .toArray()
        .then((results) => {
          response.render('index.ejs', { quotes: results });
        })
        .catch((error) => console.error(error));
    });
    app.put('/quotes', (req, res) => {
      quotesCollection
        .findOneAndUpdate(
          { name: 'Brian' },
          {
            $set: {
              name: req.body.name,
              quote: req.body.quote,
            },
          },
          {
            upsert: true,
          }
        )
        .then((result) => {
          res.json('Success');
        })
        .catch((error) => console.error(error));
    });
    app.post('/quotes', (request, response) => {
      quotesCollection
        .insertOne(request.body)
        .then((result) => {
          response.redirect('/');
          console.log(result);
        })
        .catch((error) => console.error(error));
    });
    app.delete('/quotes', (req, res) => {
      quotesCollection
        .deleteOne({ name: req.body.name })
        .then((result) => {
          if (result.deletedCount === 0) {
            return res.json('Nothing else to delete');
          }
          res.json(`Deleted Test Name quote`);
        })
        .catch((error) => console.error(error));
    });
  }
);