<?php
require_once __DIR__ . '/../config/database.php';

class User {
    private $db;
    private $table = 'users';

    public function __construct() {
        try {
            $database = new Database();
            $this->db = $database->connect();
        } catch(PDOException $e) {
            throw new Exception("Error de conexión a la base de datos: " . $e->getMessage());
        }
    }

    /**
     * Autentica un usuario mediante ATTUID y contraseña
     * @param string $attuid
     * @param string $password
     * @return array|false Datos del usuario o false si falla
     */
    public function login($attuid, $password) {
        if(empty($attuid) || empty($password)) {
            throw new Exception("ATTUID y contraseña son requeridos");
        }

        // Autenticación en tabla users, ahora incluye jornadaRocasa
        $query = "SELECT 
                    `ID`, 
                    `ATTUID`,
                    `Contrasena` AS password,
                    `active`,
                    `jornadaRocasa`
                  FROM " . $this->table . " 
                  WHERE `ATTUID` = :attuid 
                  AND `active` = 1
                  LIMIT 1";

        $stmt = $this->db->prepare($query);
        $stmt->bindParam(':attuid', $attuid, PDO::PARAM_STR);
        $stmt->execute();

        if($stmt->rowCount() === 1) {
            $user = $stmt->fetch(PDO::FETCH_ASSOC);
            if($password === $user['password']) {
                // Admin clásico
                if(strtolower($attuid) === 'admin') {
                    return [
                        'ID' => $user['ID'],
                        'ATTUID' => $user['ATTUID'],
                        'nombre_completo' => 'Administrador',
                        'Puesto' => 'admin',
                        'PDV' => '',
                        'is_admin' => true,
                    ];
                }
                // Nuevo acceso admin por jornadaRocasa
                if(isset($user['jornadaRocasa']) && intval($user['jornadaRocasa']) === 1) {
                    // Buscar nombre real en Plantilla si existe
                    $plantillaQuery = "SELECT CONCAT(`NOMBRES`, ' ', `APELLIDO PATERNO`, ' ', `APELLIDO MATERNO`) AS nombre_completo, `DEPARTAMENTO INTERNO` AS PDV FROM Plantilla WHERE `ATTUID` = :attuid AND `ESTATUS` = 'ACTIVO' LIMIT 1";
                    $plantillaStmt = $this->db->prepare($plantillaQuery);
                    $plantillaStmt->bindParam(':attuid', $attuid, PDO::PARAM_STR);
                    $plantillaStmt->execute();
                    $nombre = $user['ATTUID'];
                    $pdv = '';
                    if($plantillaStmt->rowCount() === 1) {
                        $plantillaUser = $plantillaStmt->fetch(PDO::FETCH_ASSOC);
                        $nombre = $plantillaUser['nombre_completo'];
                        $pdv = $plantillaUser['PDV'];
                    }
                    return [
                        'ID' => $user['ID'],
                        'ATTUID' => $user['ATTUID'],
                        'nombre_completo' => $nombre,
                        'Puesto' => 'admin',
                        'PDV' => $pdv,
                        'is_admin' => true,
                    ];
                }
                // Gerente
                $plantillaQuery = "SELECT 
                        `ID`,
                        CONCAT(`NOMBRES`, ' ', `APELLIDO PATERNO`, ' ', `APELLIDO MATERNO`) AS nombre_completo,
                        `ATTUID`,
                        `PUESTO`,
                        `DEPARTAMENTO INTERNO` AS PDV,
                        `ESTATUS`
                    FROM Plantilla
                    WHERE `ATTUID` = :attuid AND `ESTATUS` = 'ACTIVO'
                    LIMIT 1";
                $plantillaStmt = $this->db->prepare($plantillaQuery);
                $plantillaStmt->bindParam(':attuid', $attuid, PDO::PARAM_STR);
                $plantillaStmt->execute();

                if($plantillaStmt->rowCount() === 1) {
                    $plantillaUser = $plantillaStmt->fetch(PDO::FETCH_ASSOC);
                    // Validar si el puesto contiene la palabra "gerente" en cualquier formato
                    if(preg_match('/gerente/i', $plantillaUser['PUESTO'])) {
                        return [
                            'ID' => $plantillaUser['ID'],
                            'ATTUID' => $plantillaUser['ATTUID'],
                            'nombre_completo' => $plantillaUser['nombre_completo'],
                            'Puesto' => $plantillaUser['PUESTO'],
                            'PDV' => $plantillaUser['PDV'],
                        ];
                    }
                }
            }
        }

        return false;
    }

    /**
     * Obtiene un usuario por ATTUID
     * @param string $attuid
     * @return array|false
     */
    public function getByAttuid($attuid) {
        $query = "SELECT 
                    `ID`,
                    `Nombre Completo` AS nombre_completo,
                    `ATTUID`,
                    `Puesto`,
                    `No Empleado` AS no_empleado,
                    `PDV`,
                    `active`
                  FROM " . $this->table . " 
                  WHERE `ATTUID` = :attuid
                  LIMIT 1";
        $stmt = $this->db->prepare($query);
        $stmt->bindParam(':attuid', $attuid, PDO::PARAM_STR);
        $stmt->execute();
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }

    /**
     * Verifica si un ATTUID existe
     * @param string $attuid
     * @return bool
     */
    public function attuidExists($attuid) {
        $query = "SELECT `ID` FROM " . $this->table . " WHERE `ATTUID` = :attuid LIMIT 1";
        $stmt = $this->db->prepare($query);
        $stmt->bindParam(':attuid', $attuid, PDO::PARAM_STR);
        $stmt->execute();

        return $stmt->rowCount() > 0;
    }
}
?>