const express = require("express");
const UserModel = require("../models/user");
const MovieModel = require("../models/movie");
const router = express.Router();

router.get("/", function (req, res) {
  UserModel.find({}).then(function (users) {
    res.json({ users: users });
  });
});

router.get("/isliked/:movieId/:userId", async function (req, res) {
  const userId = await req.params["userId"];
  console.log(userId);
  const movieId = await req.params["movieId"];
  const user = await UserModel.findById(userId);
  const movieOid = await MovieModel.findOne({ id: movieId });
  const likedMovies = user.liked_movies;
  const myIndex = likedMovies.indexOf(movieOid._id) + 1;
  console.log(Boolean(myIndex));
  res.send(Boolean(myIndex));
});

router.post("/new", function (req, res) {
  const newUser = new UserModel({
    email: req.body.email,
    firstName: req.body.firstName,
    lastName: req.body.lastName,
  });

  newUser
    .save()
    .then(function (newDocument) {
      res.status(201).json(newDocument);
    })
    .catch(function (error) {
      console.error(error);
      if (error.code === 11000) {
        res.status(400).json({
          message: `User with email "${newUser.email}" already exists`,
        });
      } else {
        res.status(500).json({ message: "Error while creating the user" });
      }
    });
});

router.put("/like", async function (req, res) {
  try {
    const userId = await req.body.userId;
    const movieId = await req.body.movieId;
    const movieOid = await MovieModel.findOne({ id: movieId });
    const user = await UserModel.findById(userId);
    const likedMovies = user.liked_movies;
    const myIndex = likedMovies.indexOf(movieOid._id);
    if (myIndex == -1) {
      likedMovies.splice(myIndex, 1);
      await UserModel.findByIdAndUpdate(userId, {
        liked_movies: likedMovies.concat([movieOid._id]),
      });
      console.log(movieOid.title);
      console.log(movieOid._id);
      res.send("Done");
    } else {
      console.log(movieOid.title);
      console.log(movieOid._id);
      console.log("This movie is already liked");
      res.send("This movie is already liked");
    }
  } catch (error) {
    console.log(error);
    res.send("Internal problem");
  }
});

router.put("/unlike", async function (req, res) {
  try {
    const userId = await req.body.userId;
    const movieId = await req.body.movieId;
    const movieOid = await MovieModel.findOne({ id: movieId });
    const user = await UserModel.findById(userId);
    const likedMovies = user.liked_movies;
    const myIndex = likedMovies.indexOf(movieOid._id);
    if (myIndex !== -1) {
      likedMovies.splice(myIndex, 1);
      await UserModel.findByIdAndUpdate(userId, {
        liked_movies: likedMovies,
      });
      res.send("Done");
      console.log(movieOid.title);
      console.log(movieOid._id);
    } else {
      res.send("This movie wasn't liked");
      console.log(movieOid.title);
      console.log(movieOid._id);
      console.log("This movie wasn't liked");
    }
  } catch (error) {
    console.log(error);
    res.send("Internal problem");
  }
});

router.delete("/:userId", function (req, res) {
  UserModel.deleteOne({ _id: req.params.userId })
    .then(function () {
      res.status(204).json({ message: "User successfully deleted" });
    })
    .catch(function () {
      res.status(500).json({ message: "Error while deleting the user" });
    });
});

module.exports = router;