<?php

require_once __DIR__ . '/../config/Database.php';

class Catalogos{
    private $conn;

    public function __construct() {
        $this->conn = Database::getInstance();
    }

    /**
     * Obtiene el estado, municipio y colonia en base al código postal proporcionado.
     * @param int $codigo_postal El código postal a buscar.
     * @return array Un array con los datos de estado, municipio y colonia.
     */
    public function obtenerInfiCodigoPostal($codigo_postal){
    
        // Consulta SQL para obtener estado, ciudad y colonia en base al código postal
        $sql = "SELECT e.id AS id_estado, e.nombre AS estado, m.id AS id_municipio, m.nombre AS municipio, c.id AS id_colonia, c.nombre AS colonia
                FROM colonias c
                JOIN municipios m ON c.municipio = m.id
                JOIN estados e ON m.estado = e.id
                WHERE c.codigo_postal = ?";
    
        // Preparar la sentencia SQL
        $stmt = $this->conn->prepare($sql);
        $stmt->bind_param("i", $codigo_postal);
        $stmt->execute();

        // Obtener los resultados
        $result = $stmt->get_result();

        $stmt->close();
        $data = [];
        // Verificar si hay resultados
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_assoc()) {
                $data[] = $row;  // Agregar cada resultado a un array
            }
            return $data;
        } else {
            return $data;
        }

    }

    /**
     * Obtiene los giros.
     * @return array
     */
    public function obtenerGiros(){
        $sql = "SELECT id_giro, descripcion FROM giro ORDER BY descripcion";
        $result = $this->conn->query($sql);
        
        $giros = [];
        while($row = $result->fetch_assoc()){
            $giros[] = $row;
        }
        
        return $giros;
    }

    /**
     * Obtiene los nombres de los examenes disponibles.
     * @return array Lista del nombre de la institución a la que pertenece el examen.
     */
    public function obtenerNombresExamenes(){
        $sql = "SELECT id_examen, nombre_examen FROM examen ORDER BY nombre_examen";

        $result = $this->conn->query($sql);

        $examenes = [];
        while($row = $result->fetch_assoc()){
            $examenes[] = $row;
        }

        return $examenes;
    }

    /**
     * Obtener los tipos de identificación.
     * @return array
     */
    public function obtenerTiposIdentificacion(){
        $sql = "SELECT id_tipo_id, descripcion FROM tipo_identificacion ORDER BY descripcion";
        $result = $this->conn->query($sql);

        $tipos = [];
        while($row = $result->fetch_assoc()){
            $tipos[] = $row;
        }

        return $tipos;
    }

    /**
     * Obtiene los rangos de edad.
     * @return array
     */
    public function obtenerRangosEdad(){
        $sql = "SELECT id_rango_edad, descripcion FROM rango_edad ORDER BY id_rango_edad";
        $result = $this->conn->query($sql);

        $rangos = [];
        while($row = $result->fetch_assoc()){
            $rangos[] = $row;
        }

        return $rangos;
    }

    /**
     * Obtiene los niveles de estudio.
     * @return array
     */
    public function obtenerNivelesEstudio(){
        $sql = "SELECT id_nivel, descripcion FROM nivel_estudio ORDER BY id_nivel";
        $result = $this->conn->query($sql);

        $niveles = [];
        while($row = $result->fetch_assoc()){
            $niveles[] = $row;
        }

        return $niveles;
    }

    public function  obtenerNombresEmpresasInstituciones(){
        $sql = "SELECT DISTINCT nombre_empresa_institucion FROM info_candidatos ORDER BY nombre_empresa_institucion";
        $result = $this->conn->query($sql);

        $empresas = [];
        while($row = $result->fetch_assoc()){
            $empresas[] = $row;
        }

        return $empresas;
    }

    public function obtenerMotivosExamen(){
        $sql = "SELECT id, descripcion FROM motivo_examen ORDER BY descripcion";
        $result = $this->conn->query($sql);

        $motivos = [];
        while($row = $result->fetch_assoc()){
            $motivos[] = $row;
        }

        return $motivos;
    }

}

?>