<?php
require_once "conexion.php";


class ModeloPaciente {

    static public function MdlMostrarPaciente($tabla, $item, $valor){

        if($item != null){

            $stmt = Conexion:: conectar()->prepare("SELECT p.*, 
                   d1.province_id AS id_prov_nac, d1.department_id AS id_dep_nac,
                   d2.province_id AS id_prov_pro, d2.department_id AS id_dep_pro
            FROM $tabla p
            LEFT JOIN ubigeo_peru_districts d1 ON p.id_ubigeo_nacimiento = d1.id
            LEFT JOIN ubigeo_peru_districts d2 ON p.id_ubigeo_procedencia = d2.id
            WHERE p.$item = :$item");

            $stmt -> bindParam(":".$item, $valor, PDO::PARAM_STR);
            
            $stmt -> execute();

            return $stmt -> fetch();

        }else {

            $stmt = Conexion:: conectar()->prepare("SELECT * FROM $tabla WHERE estado = 1");
            
            $stmt -> execute();

            return $stmt -> fetchAll();
        }

        $stmt -> close();

        $stmt = null;
    }

    
     /** Registro de clientes */

     static public function mdlIngresarPaciente($tabla, $datos){

        $stmt = Conexion:: conectar()->prepare("INSERT INTO $tabla(dni, nombres, apellidos,  fecha_nacimiento, sexo, contacto, codigo_hc, estado, direccion, correo, id_ubigeo_nacimiento, id_ubigeo_procedencia, ocupacion, estado_civil, grado_instruccion, religion ) VALUES (:dni, :nombres, :apellidos,  :fecha_nacimiento, :sexo, :contacto, :codigo_hc, :estado, :direccion, :correo, :id_ubigeo_nacimiento, :id_ubigeo_procedencia,:ocupacion, :estado_civil, :grado_instruccion, :religion)");
        
        $stmt -> bindParam(":dni", $datos["dni"], PDO::PARAM_STR);
        $stmt -> bindParam(":nombres", $datos["nombres"], PDO::PARAM_STR);
        $stmt -> bindParam(":apellidos", $datos["apellidos"], PDO::PARAM_STR);
        $stmt -> bindParam(":fecha_nacimiento", $datos["fecha_nacimiento"], PDO::PARAM_STR);
        $stmt -> bindParam(":sexo", $datos["sexo"], PDO::PARAM_STR);
        $stmt -> bindParam(":contacto", $datos["contacto"], PDO::PARAM_STR);
        $stmt -> bindParam(":codigo_hc", $datos["codigo_hc"], PDO::PARAM_STR);
        $stmt -> bindParam(":estado", $datos["estado"], PDO::PARAM_INT);
        $stmt -> bindParam(":direccion", $datos["direccion"], PDO::PARAM_STR);
        $stmt -> bindParam(":correo", $datos["correo"], PDO::PARAM_STR);
        $stmt->bindParam(":id_ubigeo_nacimiento", $datos["id_ubigeo_nacimiento"], PDO::PARAM_STR);
        $stmt->bindParam(":id_ubigeo_procedencia", $datos["id_ubigeo_procedencia"], PDO::PARAM_STR);
        $stmt->bindParam(":ocupacion", $datos["ocupacion"], PDO::PARAM_STR);
        $stmt->bindParam(":estado_civil", $datos["estado_civil"], PDO::PARAM_STR);
        $stmt->bindParam(":grado_instruccion", $datos["grado_instruccion"], PDO::PARAM_STR);
        $stmt->bindParam(":religion", $datos["religion"], PDO::PARAM_STR);

        if($stmt -> execute()){
            return "ok";
        }else{
            return "error";
        }
        
        $stmt -> close();

        $stmt = null;

        
    }

    /** Editar de clientes */

    static public function mdlEditarPaciente($tabla, $datos){

        $stmt = Conexion:: conectar()->prepare("UPDATE $tabla SET dni = :dni, nombres = :nombres , apellidos = :apellidos, correo = :correo, contacto = :contacto, codigo_hc= :codigo_hc, sexo = :sexo, direccion = :direccion, fecha_nacimiento = :fecha_nacimiento, id_ubigeo_nacimiento = :id_ubigeo_nacimiento, id_ubigeo_procedencia = :id_ubigeo_procedencia, ocupacion = :ocupacion, estado_civil = :estado_civil, grado_instruccion = :grado_instruccion, religion = :religion  WHERE id_paciente = :id_paciente");
        
        $stmt -> bindParam(":id_paciente", $datos["id_paciente"], PDO::PARAM_INT);
        $stmt -> bindParam(":dni", $datos["dni"], PDO::PARAM_STR);
        $stmt -> bindParam(":nombres", $datos["nombres"], PDO::PARAM_STR);
        $stmt -> bindParam(":apellidos", $datos["apellidos"], PDO::PARAM_STR);
        $stmt -> bindParam(":correo", $datos["correo"], PDO::PARAM_STR);
        $stmt -> bindParam(":contacto", $datos["contacto"], PDO::PARAM_STR);
        $stmt -> bindParam(":codigo_hc", $datos["codigo_hc"], PDO::PARAM_STR);
        $stmt -> bindParam(":sexo", $datos["sexo"], PDO::PARAM_STR);
        $stmt -> bindParam(":direccion", $datos["direccion"], PDO::PARAM_STR);
        $stmt -> bindParam(":fecha_nacimiento", $datos["fecha_nacimiento"], PDO::PARAM_STR);
        $stmt->bindParam(":id_ubigeo_nacimiento", $datos["id_ubigeo_nacimiento"], PDO::PARAM_STR);
        $stmt->bindParam(":id_ubigeo_procedencia", $datos["id_ubigeo_procedencia"], PDO::PARAM_STR);
        $stmt->bindParam(":ocupacion", $datos["ocupacion"], PDO::PARAM_STR);
        $stmt->bindParam(":estado_civil", $datos["estado_civil"], PDO::PARAM_STR);
        $stmt->bindParam(":grado_instruccion", $datos["grado_instruccion"], PDO::PARAM_STR);
        $stmt->bindParam(":religion", $datos["religion"], PDO::PARAM_STR);


        if($stmt -> execute()){
            return "ok";
        }else{
            return "error";
        }
        
        $stmt -> close();

        $stmt = null;

        
    }

        /*=============================================
	BORRAR MARCA
	=============================================*/

	static public function mdlBorrarPaciente($tabla, $datos){

		$stmt = Conexion::conectar()->prepare("UPDATE $tabla SET estado = 1 WHERE id_paciente = :id_paciente");

		$stmt -> bindParam(":id_paciente", $datos, PDO::PARAM_INT);

		if($stmt -> execute()){

			return "ok";
		
		}else{

			return "error";	

		}

		$stmt -> close();

		$stmt = null;


	}
    /*=============================================
	ACTUALIZAR CLIENTE
	=============================================*/

	static public function mdlActualizarCliente($tabla, $item1, $valor1, $valor){

		$stmt = Conexion::conectar()->prepare("UPDATE $tabla SET $item1 = :$item1 WHERE id = :id");

		$stmt -> bindParam(":".$item1, $valor1, PDO::PARAM_STR);
		$stmt -> bindParam(":id", $valor, PDO::PARAM_STR);

		if($stmt -> execute()){

			return "ok";
		
		}else{

			return "error";	

		}

		$stmt -> close();

		$stmt = null;

	}

    static public function mdlRegistroIngreso($tabla, $datos){

        $stmt = Conexion::conectar()->prepare("INSERT INTO $tabla(id_paciente, fecha_ingreso, motivo_consulta, estado, tipo_seguro, id_responsable) VALUES (:id_paciente, CURRENT_TIMESTAMP, :motivo_consulta, :estado, :tipo_seguro, :id_responsable)");

        $stmt->bindParam(":id_paciente", $datos["id_paciente"], PDO::PARAM_INT);
        $stmt->bindParam(":motivo_consulta", $datos["motivo_consulta"], PDO::PARAM_STR);
        $stmt->bindParam(":estado", $datos["estado"], PDO::PARAM_STR);
        $stmt->bindParam(":tipo_seguro", $datos["tipo_seguro"], PDO::PARAM_STR);
        $stmt->bindParam(":id_responsable", $datos["id_responsable"], PDO::PARAM_INT);

        if($stmt->execute()){
            return "ok";
        }else{
            return "error";
        }

        $stmt->close();
        $stmt = null;
    }   

    static public function mdlGuardarDocumento($tabla, $datos){
            $stmt = Conexion::conectar()->prepare("INSERT INTO $tabla(id_paciente, tipo_documento, ruta_archivo, id_usuario) 
                                                VALUES (:id_p, :tipo_documento, :ruta_archivo, :id_u)");
            $stmt->bindParam(":id_p", $datos["id_paciente"], PDO::PARAM_INT);
            $stmt->bindParam(":tipo_documento", $datos["tipo_documento"], PDO::PARAM_STR);
            $stmt->bindParam(":ruta_archivo", $datos["ruta_archivo"], PDO::PARAM_STR);
            $stmt->bindParam(":id_u", $datos["id_usuario"], PDO::PARAM_INT);

            if($stmt->execute()){ return "ok"; } else { return "error"; }
        }

         static public function mdlGuardarDocumento1($tabla, $datos){
            $stmt = Conexion::conectar()->prepare("INSERT INTO $tabla(id_paciente, id_ingreso, tipo_documento, ruta_archivo, id_usuario) 
                                                VALUES (:id_p, :id_ingreso, :tipo_documento, :ruta_archivo, :id_u)");
            $stmt->bindParam(":id_p", $datos["id_paciente"], PDO::PARAM_INT);
            $stmt->bindParam(":id_ingreso", $datos["id_ingreso"], PDO::PARAM_INT);
            $stmt->bindParam(":tipo_documento", $datos["tipo_documento"], PDO::PARAM_STR);
            $stmt->bindParam(":ruta_archivo", $datos["ruta_archivo"], PDO::PARAM_STR);
            $stmt->bindParam(":id_u", $datos["id_usuario"], PDO::PARAM_INT);

            if($stmt->execute()){ return "ok"; } else { return "error"; }
        }

    static public function mdlVerificarDocumento($tabla, $idPaciente, $tipo){

        $stmt = Conexion::conectar()->prepare("SELECT ruta_archivo FROM $tabla WHERE id_paciente = :id AND tipo_documento = :tipo LIMIT 1");
        
        $stmt->bindParam(":id", $idPaciente, PDO::PARAM_INT);
        $stmt->bindParam(":tipo", $tipo, PDO::PARAM_STR);
        $stmt->execute();

        return $stmt->fetch(); // Retorna la ruta si existe, o false si no hay nada

        $stmt = null;
    }

    static public function mdlMostrarDocumentosIngreso($tabla, $idIngreso){
        $stmt = Conexion::conectar()->prepare("SELECT tipo_documento, ruta_archivo 
                                            FROM $tabla 
                                            WHERE id_ingreso = :id AND estado = 1");
        $stmt->bindParam(":id", $idIngreso, PDO::PARAM_INT);
        $stmt->execute();
        return $stmt->fetchAll();
    }

    static public function mdlMostrarDocumentoIndividual($tabla, $idPaciente, $tipo){

        $stmt = Conexion::conectar()->prepare("SELECT ruta_archivo FROM $tabla 
            WHERE id_paciente = :id_paciente AND tipo_documento = :tipo 
            LIMIT 1");

        $stmt->bindParam(":id_paciente", $idPaciente, PDO::PARAM_INT);
        $stmt->bindParam(":tipo", $tipo, PDO::PARAM_STR);
        $stmt->execute();

        return $stmt->fetch(); // Solo queremos el documento más reciente
    }

    static public function mdlMostrarDepartamentos($tabla) {
        $stmt = Conexion::conectar()->prepare("SELECT id, name FROM $tabla ORDER BY name ASC");
        $stmt->execute();
        return $stmt->fetchAll();
    }

    static public function mdlMostrarProvincias($tabla, $idDep) {
        // Filtramos provincias por el ID del departamento
        $stmt = Conexion::conectar()->prepare("SELECT id, name FROM $tabla WHERE department_id = :idDep ORDER BY name ASC");
        $stmt->bindParam(":idDep", $idDep, PDO::PARAM_STR);
        $stmt->execute();
        return $stmt->fetchAll();
    }

    static public function mdlMostrarDistritos($tabla, $idProv) {
        // Filtramos distritos por el ID de la provincia
        $stmt = Conexion::conectar()->prepare("SELECT id, name FROM $tabla WHERE province_id = :idProv ORDER BY name ASC");
        $stmt->bindParam(":idProv", $idProv, PDO::PARAM_STR);
        $stmt->execute();
        return $stmt->fetchAll();
    }



   
    
}