<?php

function connectDatabase() {
    $connection = 'unix_socket';
    $host = '.mysql/mysql.sock';
    $charset = 'utf8mb4';
    $db = 'practica';
    $dsn = "mysql:$connection=$host;dbname=$db;charset=$charset";
    $pdo = new PDO($dsn, "practica", "practica");
    return $pdo;
}

function closeDatabase($pdo) {
    $pdo = null;
}

function listRows($pdo, $table) {
    $query = "SELECT * FROM ?";
    $result = $pdo->prepare($query)->execute([$table]);
    return $result;
}

function createPatient($pdo, $data) {
    $query = "INSERT INTO paciente
    (nombre, apellido, fecha_de_nacimiento, documento_identificativo, tipo_documento, direccion, localidad, provincia, pais)
    VALUES (?,?,?,?,?,?,?,?,?)";
    $pdo->prepare($query)->execute([$data["nombre"], $data["apellido"], $data["fecha_de_nacimiento"],
                                  $data["documento_identificativo"], $data["tipo_documento"], $data["direccion"],
                                  $data["localidad"], $data["provincia"], $data["pais"]]);
    return "Paciente creado con éxito";
}

function editPatient($pdo, $data, $id) {
    $query = "UPDATE paciente SET nombre=?, apellido=?, fecha_de_nacimiento=?, documento_identificativo=?,
    tipo_documento=?, direccion=?, localidad=?, provincia=?, pais=? WHERE id=?";
    $result = $pdo->prepare($query);
    $result->execute([$data["nombre"], $data["apellido"], $data["fecha_de_nacimiento"],
                                  $data["documento_identificativo"], $data["tipo_documento"], $data["direccion"],
                                  $data["localidad"], $data["provincia"], $data["pais"], $id]);
    return "Paciente modificado con éxito";
}

function deletePatient($pdo, string $id) {
    $check = "SELECT * FROM informes where paciente = ?";
    $result = $pdo->prepare($check);
    $result->execute([$id]);
    if($result->columnCount() == 0){
        $statement = "DELETE FROM paciente where id=?";
        $pdo->prepare($statement)->execute([$id]);
        return "El paciente se ha eliminado correctamente";
    }
    return "No se puede eliminar el paciente dado que tiene citas";
}

function createHoliday($pdo, $data) {
    if(empty($data["medico"])){
        $query = "INSERT INTO festivo (fecha_festivo, tipo_festivo, medico) VALUES (?,?,?)";
        $pdo->prepare($query)->execute([$data["fecha_festivo"], $data["tipo_festivo"], $data["medico"]]);
    } else {
        $query = "INSERT INTO festivo (fecha_festivo, tipo_festivo) VALUES (?,?)";
        $pdo->prepare($query)->execute([$data["fecha_festivo"], $data["tipo_festivo"]]);
    }
    return "Festivo creado con éxito";
}

function editHoliday($pdo, $data, $id) {
    $query = "UPDATE festivo SET fecha_festivo=?, tipo_festivo=?, medico=? WHERE id=?";
    $pdo->prepare($query)->execute([$data["fecha_festivo"], $data["tipo_festivo"], $data["medico"], $id]);
    return "Festivo modificado con éxito";
}

function deleteHoliday($pdo, $id) {
    $statement = "DELETE FROM festivo where id=?";
    $pdo->prepare($statement)->execute([$id]);
    return "Festivo borrado con éxito";
}

function createUser($pdo, $data) {
    $query = "INSERT INTO usuario (nombre, usuario, contraseña, rol, correo) VALUES (?,?,?,?,?)";
    $pdo->prepare($query)->execute([$data["nombre"], $data["usuario"], $data["contraseña"], $data["rol"], $data["correo"]]);
    return "Usuario creado con éxito";
}

function editUser($pdo, $data, $id) {
    $query = "UPDATE usuario SET nombre=?, usuario=?, contraseña=?, rol=?, correo=? WHERE id=?";
    $result = $pdo->prepare($query);
    $result->execute([$data["nombre"], $data["usuario"], $data["contraseña"], $data["rol"], $data["correo"], $id]);
    return "Usuario modificado con éxito";
}

function deactivateUser($pdo, $data, $id) {
    $query = "UPDATE usuario SET fecha_baja=now() WHERE id=?";
    $result = $pdo->prepare($query);
    $result->execute([$id]);
    return "Usuario desactivado con éxito";
}

function listAppointments($pdo, string $doctor) {
    findRows($pdo, "cita", "medico", $doctor);
}

function listUsers($pdo) {
    $query = "SELECT usuario.nombre, usuario.usuario, rol.nombre, usuario.correo, usuario.id, fecha_baja FROM usuario
    INNER JOIN rol ON usuario.rol = rol.codigo";
    $result = $pdo->query($query)->fetchAll();
    return $result;
}

function fetchUserData($pdo, string $id) {
    $query = "SELECT * FROM usuario WHERE id=?";
    $result = $pdo->prepare($query);
    $result->execute([$id]);
    $data = $result->fetch();
    return $data;
}

function findUser($pdo, $input) {
    $input = "%$input%";
    $query = "SELECT usuario.nombre, usuario.usuario, rol.nombre, usuario.correo, usuario.id, fecha_baja
    FROM usuario, rol WHERE usuario.rol=rol.codigo AND (usuario.nombre LIKE ? OR usuario.usuario LIKE ? OR usuario.correo LIKE ?)";
    $result = $pdo->prepare($query);
    $result->execute([$input, $input, $input]);
    $data = $result->fetchAll();
    return $data;
}

function listPatients($pdo) {
    $query = "SELECT paciente.id, paciente.nombre, paciente.apellido, paciente.fecha_de_nacimiento, paciente.documento_identificativo,
    paciente.tipo_documento, paciente.direccion, municipios.nombre, provincias.provincia, paciente.pais, cita.id, informe.titulo
    FROM paciente INNER JOIN municipios ON paciente.localidad = municipios.id_municipio
    INNER JOIN provincias ON paciente.provincia = provincias.id_provincia
    LEFT JOIN cita ON paciente.id=cita.paciente LEFT JOIN informe ON paciente.id=informe.paciente
    GROUP BY paciente.id, cita.id, informe.titulo";
    $result = $pdo->prepare($query);
    $result->execute();
    $data = $result->fetchAll();
    return $data;
}


function fetchPatientData($pdo, string $id) {
    $query = "SELECT * FROM paciente WHERE id=?";
    $result = $pdo->prepare($query);
    $result->execute([$id]);
    $data = $result->fetch();
    return $data;
}

function findPatient($pdo, $input) {
    $input = "%$input%";
    $query = "SELECT * FROM paciente WHERE nombre LIKE ? OR apellido LIKE ? OR documento_identificativo LIKE ?";
    $result = $pdo->prepare($query);
    $result->execute([$input, $input, $input]);
    $data = $result->fetchAll();
    return $data;
}

function fetchCities($pdo, $id){
    $query = "SELECT * FROM municipios WHERE id_provincia=?";
    $result = $pdo->prepare($query);
    $result->execute([$id]);
    $data = $result->fetchAll();
    return $data;
}

function fetchRegions($pdo){
    $query = "SELECT * FROM provincias";
    $result = $pdo->prepare($query);
    $result->execute();
    $data = $result->fetchAll();
    return $data;
}

function listHolidays($pdo){
    $query = "SELECT * FROM festivo";
    $result = $pdo->prepare($query);
    $result->execute();
    $data = $result->fetchAll();
    return $data;
}

function listDoctors($pdo){
    $query = "SELECT * FROM usuario where rol=2";
    $result = $pdo->prepare($query);
    $result->execute();
    $data = $result->fetchAll();
    return $data;
}

function fetchHolidayData($pdo, string $id) {
    $query = "SELECT * FROM festivo WHERE id=?";
    $result = $pdo->prepare($query);
    $result->execute([$id]);
    $data = $result->fetch();
    return $data;
}

function listReports($pdo){
    $query = "SELECT informe.id, informe.titulo, informe.fecha, informe.hora, paciente.apellido,
    usuario.nombre FROM informe INNER JOIN paciente ON paciente.id = informe.paciente
    INNER JOIN usuario ON usuario.id = informe.medico";
    $result = $pdo->prepare($query);
    $result->execute();
    $data = $result->fetchAll();
    return $data;
}

function createReport($pdo, $data) {
    $query = "INSERT INTO informe
    (fecha, hora, paciente, titulo, contenido, medico)
    VALUES (?,?,?,?,?,?)";
    $pdo->prepare($query)->execute([$data["fecha"], $data["hora"], $data["paciente"],
                                  $data["titulo"], $data["contenido"], $data["medico"]]);
    return "Informe creado con éxito";
}

function editReport($pdo, $data, $id){
    $query = "UPDATE informe SET fecha=?, hora=?, paciente=?, titulo=?, contenido=?, medico=? WHERE id=?";
    $pdo->prepare($query)->execute([$data["fecha"], $data["hora"], $data["paciente"],
                                  $data["titulo"], $data["contenido"], $data["medico"], $id]);
    return "Informe modificado con éxito";
}

function deleteReport($pdo, $id) {
    $statement = "DELETE FROM informe where id=?";
    $pdo->prepare($statement)->execute([$id]);
    return "Informe borrado con éxito";
}

function fetchPatients($pdo){
    $query = "SELECT id, apellido from paciente";
    $result = $pdo->prepare($query);
    $result->execute();
    $data = $result->fetchAll();
    return $data;
}

function fetchReportData($pdo, string $id) {
    $query = "SELECT * FROM informe WHERE id=?";
    $result = $pdo->prepare($query);
    $result->execute([$id]);
    $data = $result->fetch();
    return $data;
}

function fetchLoginData($pdo, $data){
    $query = "SELECT usuario, contraseña, rol FROM usuario WHERE usuario=? AND fecha_baja IS NULL";
    $result = $pdo->prepare($query);
    $result->execute([$data["usuario"]]);
    $data = $result->fetch();
    return $data;
}

?>
