<?php
class DocumentoAdjuntoEmpleado
{
    public $id;
    public $codempleado;
    public $idTipoDocumento;
    public $nombreDocumento;
    public $tipoArchivo;
    public $nombreArchivo;
    public $fechaRegistro;
    public $usuario;

    public function __construct()
    {
        !empty($this->fechaRegistro) && $this->fechaRegistro = date('d-m-Y h:i a', strtotime($this->fechaRegistro));
    }

    public function guardar($db = null): object
    {
        try {
            if (empty($db)) $db = obtenerConexion();

            $respuesta = null;
            $id = null;
            $nombreArchivo = null;

            $usuario = App::obtenerIdUsuario();
            $extension = pathinfo($this->nombreDocumento, PATHINFO_EXTENSION);

            $query = "EXEC rrhh.sp_guardarAdjuntoEmpleado :id,:codempleado,:tipoDocumento,:nombreDocumento,:tipoArchivo,:extensionArchivo,:usuario,:respuesta,:nombreArchivo,:idAdjunto;";
            $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
            $stmt->bindParam(':id', $this->id, PDO::PARAM_INT);
            $stmt->bindParam(':codempleado', $this->codempleado, PDO::PARAM_STR);
            $stmt->bindParam(':tipoDocumento', $this->idTipoDocumento, PDO::PARAM_INT);
            $stmt->bindParam(':nombreDocumento', $this->nombreDocumento, PDO::PARAM_STR);
            $stmt->bindParam(':tipoArchivo', $this->tipoArchivo, PDO::PARAM_STR);
            $stmt->bindParam(':extensionArchivo', $extension, PDO::PARAM_STR);
            $stmt->bindParam(':usuario', $usuario, PDO::PARAM_INT);
            $stmt->bindParam(':respuesta', $respuesta, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 300);
            $stmt->bindParam(':nombreArchivo', $nombreArchivo, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 300);
            $stmt->bindParam(':idAdjunto', $id, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, 300);

            $stmt->execute();

            $this->nombreArchivo = $nombreArchivo;
            $this->id = $id;

            return (object)[
                'status' => 200,
                'message' => $respuesta,
                'data' => (object)[
                    'id' => $id,
                    'nombreArchivo' => $nombreArchivo,
                ]
            ];
        } catch (PDOException $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        } catch (Exception $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        }
    }

    public static function limpiarPorEmpleado($codempleado, $idsValidos, $db = null): object
    {
        try {
            if (empty($db)) $db = obtenerConexion();

            $strIds = count($idsValidos) > 0 ? implode(',', $idsValidos) : '0';

            $query = "EXEC rrhh.sp_limpiarAdjuntosEmpleado :codempleado,:idsValidos;";
            $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
            $stmt->bindParam(':codempleado', $codempleado, PDO::PARAM_STR);
            $stmt->bindParam(':idsValidos', $strIds, PDO::PARAM_STR);

            $stmt->execute();

            return (object)[
                'status' => 200,
                'message' => 'success'
            ];
        } catch (PDOException $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        } catch (Exception $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        }
    }

    public static function obtenerPorEmpleado($codempleado, $db = null): object
    {
        try {
            if (empty($db)) $db = obtenerConexion();

            $query = "SELECT * FROM rrhh.view_adjuntosEmpleado WHERE codempleado = :codempleado and estado = 1;";
            $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
            $stmt->bindParam(':codempleado', $codempleado, PDO::PARAM_STR);

            $stmt->execute();

            $data = $stmt->fetchAll(PDO::FETCH_CLASS, __CLASS__);

            return (object)[
                'status' => 200,
                'message' => 'success',
                'data' => $data
            ];
        } catch (PDOException $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        } catch (Exception $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        }
    }
}
