import { Router } from 'express'
import bcrypt from 'bcryptjs'
import db from '../db/init.js'
import { sqlOne } from '../db/helpers.js'
import { generarToken, verificarToken, type AuthRequest } from '../middleware/auth.js'

const router = Router()

router.post('/login', (req, res) => {
  const { nombre_usuario, contrasena } = req.body as {
    nombre_usuario?: string
    contrasena?: string
  }

  if (!nombre_usuario || !contrasena) {
    res.status(400).json({ error: 'Usuario y contraseña son obligatorios' })
    return
  }

  const usuario = sqlOne<{ id: number; nombre_usuario: string; contrasena_hash: string }>(
    db.prepare('SELECT id, nombre_usuario, contrasena_hash FROM usuarios WHERE nombre_usuario = ?')
      .get(nombre_usuario),
  )

  if (!usuario || !bcrypt.compareSync(contrasena, usuario.contrasena_hash)) {
    res.status(401).json({ error: 'Credenciales incorrectas' })
    return
  }

  const token = generarToken({ id: usuario.id, nombre_usuario: usuario.nombre_usuario })
  res.json({
    token,
    usuario: { id: usuario.id, nombre_usuario: usuario.nombre_usuario },
  })
})

router.get('/me', verificarToken, (req: AuthRequest, res) => {
  res.json({ usuario: req.usuario })
})

export default router
