import { Injectable, BadRequestException, UnauthorizedException } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { PrismaService } from '../../../prisma/prisma.service';
import * as bcrypt from 'bcryptjs';
import { CreateLoginDto } from './dto/create-login.dto';

@Injectable()
export class LoginService {
  constructor(
    private prisma: PrismaService,
    private jwtService: JwtService,
  ) { }

  private getJwtToken(payload: { id: number }) {
    return this.jwtService.sign(payload);
  }

  async login(loginDto: CreateLoginDto) {
    const { email, contrasena } = loginDto;

    const user = await this.prisma.usuarios.findFirst({
      where: { email: email, estado: true, confirmacion: true },
      select: {
        id: true,
        contrasena: true,
        email: true,
        personas: {
          select: { nombre: true }
        }
      }
    });

    if (!user) {
      throw new UnauthorizedException('Usuario no encontrado');
    }

    if (!user.contrasena || !bcrypt.compareSync(contrasena, user.contrasena)) {
      throw new BadRequestException("Credenciales no son válidas");
    }

    const token = this.getJwtToken({ id: user.id });
    return {
      user: {
        id: user.id,
        nombre: user.personas.nombre,
        email: user.email,
      },
      token,
      respuesta: true
    };
  }
}
