// controllers/authController.js
const bcrypt = require('bcryptjs');
const StaffModel = require('../models/staffModel');
const { generateToken } = require('../utils/jwt'); // import da nossa lib de JWT

/**
 * POST /login
 * Recebe { username, password } no body. Se estiver ok, retorna um cookie 'token' e JSON com mensagem de sucesso.
 */
const login = async (req, res) => {
  try {
    const { username, password } = req.body;
    if (!username || !password) {
      return res.status(400).json({ error: 'É necessário enviar username e password' });
    }

    // Supondo que findByUsername retorne uma Promise que resolve para o usuário ou null
    const user = await StaffModel.findByUsername(username);
    if (!user) {
      return res.status(401).json({ error: 'Usuário não encontrado' });
    }

    const valid = await bcrypt.compare(password, user.password);
    if (!valid) {
      return res.status(401).json({ error: 'Senha inválida' });
    }

    // Gera o token via nossa lib. Payload mínimo: id e role.
    const token = generateToken({ id: user.id, role: user.role }, '30m');

    // Define o cookie ‘token’ com HttpOnly, expiração em 30min, SameSite=Strict
    res.cookie('token', token, {
      httpOnly: true,
      maxAge: 30 * 60 * 1000,
      sameSite: 'Strict',
      // secure: true // caso use HTTPS em produção
    });

    return res.json({ message: 'Login realizado com sucesso' });
  } catch (error) {
    console.error('Erro no login:', error);
    return res.status(500).json({ error: 'Erro no servidor' });
  }
};

/**
 * POST /logout
 * Limpa o cookie 'token'.
 */
const logout = (req, res) => {
  res.clearCookie('token');
  return res.json({ message: 'Logout realizado' });
};

/**
 * GET /me
 * Supondo que haja um middleware que decodifica o token e coloca `req.user`.
 */
const me = (req, res) => {
  // req.user pode ter sido preenchido por um middleware de autenticação (ex.: verifyToken)
  if (!req.user) {
    return res.status(401).json({ error: 'Não autenticado' });
  }
  return res.json({ user: req.user });
};

module.exports = { login, logout, me };
