import express from 'express';
import multer from 'multer';
import path from 'path'
import moment from 'moment'

import userService from '../user/userService.js';
import articleService from './articleService.js';



const __dirname = path.resolve();

export const router = express.Router();

const upload = multer({
  storage: multer.diskStorage({ // 저장한공간 정보 : 하드디스크에 저장
    destination(req, file, done) { // 저장 위치
      done(null, 'public/uploads/'); // uploads라는 폴더 안에 저장
    },
    filename(req, file, done) { // 파일명을 어떤 이름으로 올릴지
      const ext = path.extname(file.originalname); // 파일의 확장자
      done(null, path.basename(file.originalname, ext) + Date.now() + ext); // 파일이름 + 날짜 + 확장자 이름으로 저장
    }
  }),
  limits: { fileSize: 5 * 1024 * 1024 } // 5메가로 용량 제한
});

router.post("/", upload.array("img"), async function (req, res, next) {
  if (!req.session.sessionid) {
    console.log("No session error");
    return;
  }
  console.log("POST /article");

  const inputTitle = req.body.title
  const inputContent = req.body.content
  const inputImage = req.files.map(el => el.path);
  const useremail = req.session.sessionid.email
  const author = await userService.findUserByEmail(useremail);
  const inputkeyword = req.body.keyword
  const inputlat = req.body.latitude
  const inputlng = req.body.longitude

  await articleService.createArticle({
    title: inputTitle,
    content: inputContent,
    imageUrls: inputImage,
    author: author,
    keyword: inputkeyword,
    latitude: inputlat,
    longitude: inputlng,
    comments: [],
    likes: [],
  });

  console.log('saved.')
  res.send();
});


router.get("/", async (req, res) => {
  console.log(path.join(process.cwd(), '/public'))
  if (!req.session.sessionid) {
    console.log("No session");
  }
  const articles = await articleService.findAllArticle();
  articles.forEach((article) => {
    article.imageUrls.forEach(
      (urls) => {
        try {
          //res.sendFile(path.join(__dirname, urls));
        }
        catch (err) {
          console.log(err)
        }
      });
  });
  res.send(JSON.stringify(articles));
});

router.get("/:id", async (req, res) => {
  if (!req.session.sessionid) {
    console.log("No session");
  }
  const articles = await articleService.findArticleById(req.params.id);
  res.send(JSON.stringify(articles));
});

router.post("/:id/comment", async (req, res) => {
  if (!req.session.sessionid) {
    console.log("No session");
  }
  const user = await userService.findUserByEmail(req.session.sessionid.email);
  const data = {
    content: req.body.content,
    author: user._id
  }
  const articles = await articleService.createComment(req.params.id, data);
  res.send(JSON.stringify(articles));
})

router.delete("/:articleid/comment/:commentid", async (req, res) => {
  if (!req.session.sessionid) {
    console.log("No session");
  }
  const articles = await articleService.deleteComment(req.params.articleid, req.params.commentid);
  res.send(JSON.stringify(articles));
});

router.put("/:id/like", async (req, res) => {
  if (!req.session.sessionid) {
    console.log("No session");
  }
  const user = await userService.findUserByEmail(req.session.sessionid.email);
  const articles = await articleService.setLike(req.params.id, user._id)
  res.send(JSON.stringify(articles));
});

export default router;