const express = require('express');
const { sequelize } = require('../models');
const { QueryTypes } = require('sequelize');

const jwt = require('jsonwebtoken');
const JWT_SECRET = process.env.JWT_SECRET;

const router = express.Router();

const authenticateJWT = (req, res, next) => {
  const authHeader = req.headers.authorization

  if (authHeader) {
    const token = authHeader.split(' ')

    if (token[0].toLowerCase() != 'bearer')
      return res.status(400).send('не поддерживаемый тип авторизации')

    jwt.verify(token[1], JWT_SECRET, (err, data) => {
      if (err) return res.status(403).send(err)

      req.user = data
      next()
    })
  } else {
    res.status(401).send('нет заголовка авторизации')
  }
}

router.get('/', [authenticateJWT], async (req, res) => {
  try {
    const favorites = await sequelize.query(`
      SELECT f.favorite_id, h.hall_name, p.full_name as photographer_name
      FROM favorites f
      LEFT JOIN halls h ON f.hall_id = h.hall_id
      LEFT JOIN photographers p ON f.photographer_id = p.photographer_id
      WHERE f.client_id = :clientId
    `, {
      replacements: { clientId: req.user.id },
      type: QueryTypes.SELECT
    });
    res.json(favorites);
  } catch (error) {
    res.status(500).send(error.message);
  }
});

router.post('/', [authenticateJWT], async (req, res) => {
  const { hall_id, photographer_id } = req.body;
  try {
    await sequelize.query(`
      INSERT INTO favorites (client_id, hall_id, photographer_id)
      VALUES (:clientId, :hallId, :photographerId)
    `, {
      replacements: { 
        clientId: req.user.id, 
        hallId: hall_id || null, 
        photographerId: photographer_id || null 
      },
      type: QueryTypes.INSERT
    });
    res.status(201).send('Добавлено в избранное');
  } catch (error) {
    res.status(500).send(error.message);
  }
});
module.exports = router;