<?php
include_once '../../config/Database.php';

class DocenteController
{
    private $db;

    public function __construct()
    {
        $database = new Database();
        $this->db = $database->getConnection();
    }

    public function agregarDocente($nombres, $paterno, $materno, $ci, $contrasena, $ci_expe, $fecha_nacimiento, $genero, $celular, $email, $direccion, $usuario, $sucursal)
    {
        try {
            $query = "INSERT INTO docentes (nombres_varchar, paterno_varchar, materno_varchar, ci_varchar, contrasena, ci_expe_varchar, fecha_nacimiento_dt, genero_varchar, celular_varchar, email_varchar, direccion_varchar, usuario_varchar, sucursal) 
                      VALUES (:nombres, :paterno, :materno, :ci, :contrasena, :ci_expe, :fecha_nacimiento, :genero, :celular, :email, :direccion, :usuario, :sucursal)";
            $stmt = $this->db->prepare($query);

            $contrasena_hashed = password_hash($contrasena, PASSWORD_BCRYPT);

            $stmt->bindParam(':nombres', $nombres);
            $stmt->bindParam(':paterno', $paterno);
            $stmt->bindParam(':materno', $materno);
            $stmt->bindParam(':ci', $ci);
            $stmt->bindParam(':contrasena', $contrasena_hashed);
            $stmt->bindParam(':ci_expe', $ci_expe);
            $stmt->bindParam(':fecha_nacimiento', $fecha_nacimiento);
            $stmt->bindParam(':genero', $genero);
            $stmt->bindParam(':celular', $celular);
            $stmt->bindParam(':email', $email);
            $stmt->bindParam(':direccion', $direccion);
            $stmt->bindParam(':usuario', $usuario);
            $stmt->bindParam(':sucursal', $sucursal);

            return $stmt->execute();
        } catch (PDOException $e) {
            error_log("Error al agregar docente: " . $e->getMessage());
            return false;
        }
    }

    public function actualizarDocente($cod_docente_int, $nombres, $paterno, $materno, $ci, $ci_expe, $fecha_nacimiento, $genero, $celular, $email, $direccion, $usuario, $sucursal, $contrasena = null)
    {
        try {
            $query = "UPDATE docentes SET nombres_varchar = :nombres, paterno_varchar = :paterno, materno_varchar = :materno, ci_varchar = :ci, ci_expe_varchar = :ci_expe, fecha_nacimiento_dt = :fecha_nacimiento, genero_varchar = :genero, celular_varchar = :celular, email_varchar = :email, direccion_varchar = :direccion, usuario_varchar = :usuario, sucursal = :sucursal";

            if ($contrasena) {
                $query .= ", contrasena = :contrasena";
            }

            $query .= " WHERE cod_docente_int = :cod_docente_int";
            $stmt = $this->db->prepare($query);

            $stmt->bindParam(':nombres', $nombres);
            $stmt->bindParam(':paterno', $paterno);
            $stmt->bindParam(':materno', $materno);
            $stmt->bindParam(':ci', $ci);
            $stmt->bindParam(':ci_expe', $ci_expe);
            $stmt->bindParam(':fecha_nacimiento', $fecha_nacimiento);
            $stmt->bindParam(':genero', $genero);
            $stmt->bindParam(':celular', $celular);
            $stmt->bindParam(':email', $email);
            $stmt->bindParam(':direccion', $direccion);
            $stmt->bindParam(':usuario', $usuario);
            $stmt->bindParam(':sucursal', $sucursal);
            $stmt->bindParam(':cod_docente_int', $cod_docente_int);

            if ($contrasena) {
                $contrasena_hashed = password_hash($contrasena, PASSWORD_BCRYPT);
                $stmt->bindParam(':contrasena', $contrasena_hashed);
            }

            return $stmt->execute();
        } catch (PDOException $e) {
            error_log("Error al actualizar docente: " . $e->getMessage());
            return false;
        }
    }

    public function eliminarDocente($cod_docente_int)
    {
        try {
            $query = "DELETE FROM docentes WHERE cod_docente_int = :cod_docente_int";
            $stmt = $this->db->prepare($query);
            $stmt->bindParam(':cod_docente_int', $cod_docente_int);
            return $stmt->execute();
        } catch (PDOException $e) {
            error_log("Error al eliminar docente: " . $e->getMessage());
            return false;
        }
    }

    public function listarDocentes()
    {
        try {
            $query = "SELECT * FROM docentes";
            $stmt = $this->db->prepare($query);
            $stmt->execute();
            return $stmt->fetchAll(PDO::FETCH_ASSOC);
        } catch (PDOException $e) {
            error_log("Error al listar docentes: " . $e->getMessage());
            return [];
        }
    }

    public function listarDocentesPorFecha($fechaInicio, $fechaFin)
    {
        try {
            $query = "SELECT * FROM docentes WHERE DATE(fecha_registro) BETWEEN :fechaInicio AND :fechaFin";
            $stmt = $this->db->prepare($query);
            $stmt->bindParam(':fechaInicio', $fechaInicio);
            $stmt->bindParam(':fechaFin', $fechaFin);
            $stmt->execute();
            return $stmt->fetchAll(PDO::FETCH_ASSOC);
        } catch (PDOException $e) {
            error_log("Error al listar docentes por fecha: " . $e->getMessage());
            return [];
        }
    }
}
