import { FastifyInstance } from 'fastify';
import { authenticate } from '../hooks/authenticate';
import * as authService from '../services/auth.service';

export default async function authRoutes(fastify: FastifyInstance) {
  fastify.post('/login', async (request, reply) => {
    const { email, password } = request.body as any;
    const user = await authService.validateCredentials(email, password);
    if (!user) {
      return reply.status(401).send({ error: 'Credenciales inválidas' });
    }
    const token = fastify.jwt.sign({
      id: user.id,
      email: user.email,
      name: user.name,
      role: user.role,
      tenantId: 1
    }, { expiresIn: '7d' });
    return {
      token,
      user: {
        id: user.id,
        name: user.name,
        email: user.email,
        role: user.role,
        createdAt: user.createdAt
      }
    };
  });

  fastify.get('/me', { preHandler: authenticate }, async (request, reply) => {
    const userId = (request as any).user.id;
    const user = await authService.findUserById(userId);
    if (!user) {
      return reply.status(404).send({ error: 'Usuario no encontrado' });
    }
    return { user };
  });

  fastify.patch('/me', { preHandler: authenticate }, async (request, reply) => {
    const userId = (request as any).user.id;
    try {
      const updatedUser = await authService.updateUserProfile(userId, request.body);
      return { user: updatedUser };
    } catch (err: any) {
      return reply.status(err.statusCode || 500).send({ error: err.message || 'Error del servidor' });
    }
  });
}
