<?php

declare(strict_types=1);

namespace App\Repository;

final class TblContenidoTemaRepository
{
    private \PDO $database;

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

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

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

        return $TblContenidoTema;
    }

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

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

    public function create(object $TblContenidoTema): object
    {
        $query = 'INSERT INTO `TblContenidoTema` (`Contenido`, `Audio`, `IdTema`, `Celula`, `Codigo`, `Video`, `MaterialApoyo`, `DescripcionAudio`, `field1`, `field2`, `field3`, `field4`, `field5`) VALUES (:Contenido, :Audio, :IdTema, :Celula, :Codigo, :Video, :MaterialApoyo, :DescripcionAudio, :field1, :field2, :field3, :field4, :field5)';
        $statement = $this->getDb()->prepare($query);
//         $statement->bindParam('id', $TblContenidoTema->id);
//         $statement->bindParam('fecha', $TblContenidoTema->fecha);
        $statement->bindParam('Contenido', $TblContenidoTema->Contenido);
        $statement->bindParam('Audio', $TblContenidoTema->Audio);
        $statement->bindParam('IdTema', $TblContenidoTema->IdTema);
        $statement->bindParam('Celula', $TblContenidoTema->Celula);
        $statement->bindParam('Codigo', $TblContenidoTema->Codigo);
        $statement->bindParam('Video', $TblContenidoTema->Video);
        $statement->bindParam('MaterialApoyo', $TblContenidoTema->MaterialApoyo);
        $statement->bindParam('DescripcionAudio', $TblContenidoTema->DescripcionAudio);
        $statement->bindParam('field1', $TblContenidoTema->field1);
        $statement->bindParam('field2', $TblContenidoTema->field2);
        $statement->bindParam('field3', $TblContenidoTema->field3);
        $statement->bindParam('field4', $TblContenidoTema->field4);
        $statement->bindParam('field5', $TblContenidoTema->field5);

        $statement->execute();

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

    public function update(object $TblContenidoTema, object $data): object
    {
        if (isset($data->fecha)) {
            $TblContenidoTema->fecha = $data->fecha;
        }
        if (isset($data->Contenido)) {
            $TblContenidoTema->Contenido = $data->Contenido;
        }
        if (isset($data->Audio)) {
            $TblContenidoTema->Audio = $data->Audio;
        }
        if (isset($data->IdTema)) {
            $TblContenidoTema->IdTema = $data->IdTema;
        }
        if (isset($data->Celula)) {
            $TblContenidoTema->Celula = $data->Celula;
        }
        if (isset($data->Codigo)) {
            $TblContenidoTema->Codigo = $data->Codigo;
        }
        if (isset($data->Video)) {
            $TblContenidoTema->Video = $data->Video;
        }
        if (isset($data->MaterialApoyo)) {
            $TblContenidoTema->MaterialApoyo = $data->MaterialApoyo;
        }
        if (isset($data->DescripcionAudio)) {
            $TblContenidoTema->DescripcionAudio = $data->DescripcionAudio;
        }
        if (isset($data->field1)) {
            $TblContenidoTema->field1 = $data->field1;
        }
        if (isset($data->field2)) {
            $TblContenidoTema->field2 = $data->field2;
        }
        if (isset($data->field3)) {
            $TblContenidoTema->field3 = $data->field3;
        }
        if (isset($data->field4)) {
            $TblContenidoTema->field4 = $data->field4;
        }
        if (isset($data->field5)) {
            $TblContenidoTema->field5 = $data->field5;
        }

        $query = 'UPDATE `TblContenidoTema` SET `fecha` = :fecha, `Contenido` = :Contenido, `Audio` = :Audio, `IdTema` = :IdTema, `Celula` = :Celula, `Codigo` = :Codigo, `Video` = :Video, `MaterialApoyo` = :MaterialApoyo, `DescripcionAudio` = :DescripcionAudio, `field1` = :field1, `field2` = :field2, `field3` = :field3, `field4` = :field4, `field5` = :field5 WHERE `id` = :id';
        $statement = $this->getDb()->prepare($query);
        $statement->bindParam('id', $TblContenidoTema->id);
        $statement->bindParam('fecha', $TblContenidoTema->fecha);
        $statement->bindParam('Contenido', $TblContenidoTema->Contenido);
        $statement->bindParam('Audio', $TblContenidoTema->Audio);
        $statement->bindParam('IdTema', $TblContenidoTema->IdTema);
        $statement->bindParam('Celula', $TblContenidoTema->Celula);
        $statement->bindParam('Codigo', $TblContenidoTema->Codigo);
        $statement->bindParam('Video', $TblContenidoTema->Video);
        $statement->bindParam('MaterialApoyo', $TblContenidoTema->MaterialApoyo);
        $statement->bindParam('DescripcionAudio', $TblContenidoTema->DescripcionAudio);
        $statement->bindParam('field1', $TblContenidoTema->field1);
        $statement->bindParam('field2', $TblContenidoTema->field2);
        $statement->bindParam('field3', $TblContenidoTema->field3);
        $statement->bindParam('field4', $TblContenidoTema->field4);
        $statement->bindParam('field5', $TblContenidoTema->field5);

        $statement->execute();

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

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