<?php

declare(strict_types=1);

namespace App\Repository;

final class TblPerfilUsuarioComunidadHigenRepository
{
    private \PDO $database;

    public function __construct(\PDO $database)
    {
        $this->database = $database;
    }

    public function getDb(): \PDO
    {
        return $this->database;
    }

    public function checkAndGet(int $TblPerfilUsuarioComunidadHigenId): object
    {
        $query = 'SELECT * FROM `TblPerfilUsuarioComunidadHigen` WHERE `id` = :id';
        $statement = $this->getDb()->prepare($query);
        $statement->bindParam('id', $TblPerfilUsuarioComunidadHigenId);
        $statement->execute();
        $TblPerfilUsuarioComunidadHigen = $statement->fetchObject();
        if (! $TblPerfilUsuarioComunidadHigen) {
            throw new \Exception('TblPerfilUsuarioComunidadHigen not found.', 404);
        }

        return $TblPerfilUsuarioComunidadHigen;
    }

    public function getAll(): array
    {
        $query = 'SELECT * FROM `TblPerfilUsuarioComunidadHigen` ORDER BY `id`';
        $statement = $this->getDb()->prepare($query);
        $statement->execute();

        return (array) $statement->fetchAll();
    }

    public function create(object $TblPerfilUsuarioComunidadHigen): object
    {
        $query = 'INSERT INTO `TblPerfilUsuarioComunidadHigen` (`IdUsuario`, `IdNivelEducativo`, `Estado`, `IdPais`, `IdDepartamento`, `IdCiudad`, `IdRol`, `Rol`, `CorreoElectronico`, `FechaPublicacion`, 
        `TiempoExperiencia`, `field1`, `field2`, `field3`, `field4`, `field5`) VALUES (:IdUsuario, :IdNivelEducativo, :Estado, :IdPais, :IdDepartamento, :IdCiudad, :IdRol, :Rol, :CorreoElectronico, 
        :FechaPublicacion, :TiempoExperiencia, :field1, :field2, :field3, :field4, :field5)';
        $statement = $this->getDb()->prepare($query);
//         $statement->bindParam('id', $TblPerfilUsuarioComunidadHigen->id);
//         $statement->bindParam('fecha', $TblPerfilUsuarioComunidadHigen->fecha);
        $statement->bindParam('IdUsuario', $TblPerfilUsuarioComunidadHigen->IdUsuario);
        $statement->bindParam('IdNivelEducativo', $TblPerfilUsuarioComunidadHigen->IdNivelEducativo);
        $statement->bindParam('Estado', $TblPerfilUsuarioComunidadHigen->Estado);
        $statement->bindParam('IdPais', $TblPerfilUsuarioComunidadHigen->IdPais);
        $statement->bindParam('IdDepartamento', $TblPerfilUsuarioComunidadHigen->IdDepartamento);
        $statement->bindParam('IdCiudad', $TblPerfilUsuarioComunidadHigen->IdCiudad);
        $statement->bindParam('IdRol', $TblPerfilUsuarioComunidadHigen->IdRol);
        $statement->bindParam('Rol', $TblPerfilUsuarioComunidadHigen->Rol);
        $statement->bindParam('CorreoElectronico', $TblPerfilUsuarioComunidadHigen->CorreoElectronico);
        $statement->bindParam('FechaPublicacion', $TblPerfilUsuarioComunidadHigen->FechaPublicacion);
        $statement->bindParam('TiempoExperiencia', $TblPerfilUsuarioComunidadHigen->TiempoExperiencia);
        $statement->bindParam('field1', $TblPerfilUsuarioComunidadHigen->field1);
        $statement->bindParam('field2', $TblPerfilUsuarioComunidadHigen->field2);
        $statement->bindParam('field3', $TblPerfilUsuarioComunidadHigen->field3);
        $statement->bindParam('field4', $TblPerfilUsuarioComunidadHigen->field4);
        $statement->bindParam('field5', $TblPerfilUsuarioComunidadHigen->field5);

        $statement->execute();

        return $this->checkAndGet((int) $this->getDb()->lastInsertId());
    }

    public function update(object $TblPerfilUsuarioComunidadHigen, object $data): object
    {
        if (isset($data->fecha)) {
            $TblPerfilUsuarioComunidadHigen->fecha = $data->fecha;
        }
        if (isset($data->IdUsuario)) {
            $TblPerfilUsuarioComunidadHigen->IdUsuario = $data->IdUsuario;
        }
        if (isset($data->IdNivelEducativo)) {
            $TblPerfilUsuarioComunidadHigen->IdNivelEducativo = $data->IdNivelEducativo;
        }
        if (isset($data->Estado)) {
            $TblPerfilUsuarioComunidadHigen->Estado = $data->Estado;
        }
        if (isset($data->IdPais)) {
            $TblPerfilUsuarioComunidadHigen->IdPais = $data->IdPais;
        }
        if (isset($data->IdDepartamento)) {
            $TblPerfilUsuarioComunidadHigen->IdDepartamento = $data->IdDepartamento;
        }
        if (isset($data->IdCiudad)) {
            $TblPerfilUsuarioComunidadHigen->IdCiudad = $data->IdCiudad;
        }
        if (isset($data->IdRol)) {
            $TblPerfilUsuarioComunidadHigen->IdRol = $data->IdRol;
        }
        if (isset($data->Rol)) {
            $TblPerfilUsuarioComunidadHigen->Rol = $data->Rol;
        }
        if (isset($data->CorreoElectronico)) {
            $TblPerfilUsuarioComunidadHigen->CorreoElectronico = $data->CorreoElectronico;
        }
        if (isset($data->FechaPublicacion)) {
            $TblPerfilUsuarioComunidadHigen->FechaPublicacion = $data->FechaPublicacion;
        }
        if (isset($data->TiempoExperiencia)) {
            $TblPerfilUsuarioComunidadHigen->TiempoExperiencia = $data->TiempoExperiencia;
        }
        if (isset($data->field1)) {
            $TblPerfilUsuarioComunidadHigen->field1 = $data->field1;
        }
        if (isset($data->field2)) {
            $TblPerfilUsuarioComunidadHigen->field2 = $data->field2;
        }
        if (isset($data->field3)) {
            $TblPerfilUsuarioComunidadHigen->field3 = $data->field3;
        }
        if (isset($data->field4)) {
            $TblPerfilUsuarioComunidadHigen->field4 = $data->field4;
        }
        if (isset($data->field5)) {
            $TblPerfilUsuarioComunidadHigen->field5 = $data->field5;
        }

        $query = 'UPDATE `TblPerfilUsuarioComunidadHigen` SET `fecha` = :fecha, `IdUsuario` = :IdUsuario, `IdNivelEducativo` = :IdNivelEducativo, `Estado` = :Estado, `IdPais` = :IdPais, `IdDepartamento` = :IdDepartamento, `IdCiudad` = :IdCiudad, `IdRol` = :IdRol, `Rol` = :Rol, `CorreoElectronico` = :CorreoElectronico, `FechaPublicacion` = :FechaPublicacion, `TiempoExperiencia` = :TiempoExperiencia, `field1` = :field1, `field2` = :field2, `field3` = :field3, `field4` = :field4, `field5` = :field5 WHERE `id` = :id';
        $statement = $this->getDb()->prepare($query);
        $statement->bindParam('id', $TblPerfilUsuarioComunidadHigen->id);
        $statement->bindParam('fecha', $TblPerfilUsuarioComunidadHigen->fecha);
        $statement->bindParam('IdUsuario', $TblPerfilUsuarioComunidadHigen->IdUsuario);
        $statement->bindParam('IdNivelEducativo', $TblPerfilUsuarioComunidadHigen->IdNivelEducativo);
        $statement->bindParam('Estado', $TblPerfilUsuarioComunidadHigen->Estado);
        $statement->bindParam('IdPais', $TblPerfilUsuarioComunidadHigen->IdPais);
        $statement->bindParam('IdDepartamento', $TblPerfilUsuarioComunidadHigen->IdDepartamento);
        $statement->bindParam('IdCiudad', $TblPerfilUsuarioComunidadHigen->IdCiudad);
        $statement->bindParam('IdRol', $TblPerfilUsuarioComunidadHigen->IdRol);
        $statement->bindParam('Rol', $TblPerfilUsuarioComunidadHigen->Rol);
        $statement->bindParam('CorreoElectronico', $TblPerfilUsuarioComunidadHigen->CorreoElectronico);
        $statement->bindParam('FechaPublicacion', $TblPerfilUsuarioComunidadHigen->FechaPublicacion);
        $statement->bindParam('TiempoExperiencia', $TblPerfilUsuarioComunidadHigen->TiempoExperiencia);
        $statement->bindParam('field1', $TblPerfilUsuarioComunidadHigen->field1);
        $statement->bindParam('field2', $TblPerfilUsuarioComunidadHigen->field2);
        $statement->bindParam('field3', $TblPerfilUsuarioComunidadHigen->field3);
        $statement->bindParam('field4', $TblPerfilUsuarioComunidadHigen->field4);
        $statement->bindParam('field5', $TblPerfilUsuarioComunidadHigen->field5);

        $statement->execute();

        return $this->checkAndGet((int) $TblPerfilUsuarioComunidadHigen->id);
    }

    public function delete(int $TblPerfilUsuarioComunidadHigenId): void
    {
        $query = 'DELETE FROM `TblPerfilUsuarioComunidadHigen` WHERE `id` = :id';
        $statement = $this->getDb()->prepare($query);
        $statement->bindParam('id', $TblPerfilUsuarioComunidadHigenId);
        $statement->execute();
    }
}
