<?php
require_once __DIR__ . '/../Models/Usuario.php';

define('TOKEN_EXPIRACION_MINUTOS', 10);

class AuthController
{
    private $db;

    public function __construct($db)
    {
        $this->db = $db;
    }

    public function login($username, $password)
    {
        $stmt = $this->db->prepare("SELECT * FROM usuarios WHERE username = ?");
        $stmt->bind_param("s", $username);
        $stmt->execute();
        $result = $stmt->get_result();
        $user = $result->fetch_assoc();

        if ($user && password_verify($password, $user['password_hash'])) {
            $_SESSION['usuario_temp'] = $user;

            $token = rand(100000, 999999);
            $_SESSION['token_login'] = $token;
            $_SESSION['token_expira'] = time() + (TOKEN_EXPIRACION_MINUTOS * 60);

            // Enviar token por correo
            $correo = $user['correo'];
            $asunto = "Tu código de acceso";
            $mensaje = "Tu código de acceso es: " . $token;
            $cabeceras = "From: no-reply@integrator.pe";

            @mail($correo, $asunto, $mensaje, $cabeceras);

            header('Location: token.php');
            exit;
        }

        return false;
    }


    public function verificarToken($inputToken)
    {
        if (!isset($_SESSION['token_login']) || !isset($_SESSION['token_expira'])) {
            return false;
        }

        if (time() > $_SESSION['token_expira']) {
            unset($_SESSION['token_login'], $_SESSION['token_expira'], $_SESSION['usuario_temp']);
            return false;
        }

        if ($_SESSION['token_login'] == $inputToken) {
            $usuario = $_SESSION['usuario_temp'];
            $_SESSION['usuario_id'] = $usuario['id'];
            $_SESSION['username'] = $usuario['username'];
            $_SESSION['es_superadmin'] = $usuario['es_superadmin'];
            $_SESSION['fullname'] = $usuario['fullname'];

            // Limpiar temporal
            unset($_SESSION['token_login'], $_SESSION['token_expira'], $_SESSION['usuario_temp']);
            return true;
        }

        return false;
    }


    public function logout()
    {
        session_start();
        session_destroy();
    }
}
