<?php
class CodigoObservacionPlanillaUnica
{
    public $id;
    public $codigo;
    public $concepto;
    public $aplicaPersonaNatural;
    public $aplicaPersonaJuridica;
    public $validaciones;
    public $fechaRegistro;
    public $usuario;

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

    public static function obtenerTodos(): object
    {
        $db = obtenerConexion();

        $query = "SELECT * FROM rrhh.view_codigosObservacionPlanillaUnica WHERE estado = 1 ORDER BY codigo ASC";

        $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);

        try {
            $stmt->execute();

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

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

    public function guardar($usuario): object
    {
        $db = obtenerConexion();

        $respuesta = null;
        $id = null;

        $query = "EXEC rrhh.sp_guardarCodigoObservacionPlanillaUnica :id,:codigo,:concepto,:aplicaPersonaNatural,:aplicaPersonaJuridica,:validaciones,:usuario,:respuesta,:idCodigo;";
        $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
        $stmt->bindParam(":id", $this->id, PDO::PARAM_INT);
        $stmt->bindParam(":codigo", $this->codigo, PDO::PARAM_INT);
        $stmt->bindParam(":concepto", $this->concepto, PDO::PARAM_STR);
        $stmt->bindParam(":aplicaPersonaNatural", $this->aplicaPersonaNatural, PDO::PARAM_INT);
        $stmt->bindParam(":aplicaPersonaJuridica", $this->aplicaPersonaJuridica, PDO::PARAM_INT);
        $stmt->bindParam(":validaciones", $this->validaciones, PDO::PARAM_STR);
        $stmt->bindParam(":usuario", $usuario, PDO::PARAM_INT);
        $stmt->bindParam(":respuesta", $respuesta, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 4000);
        $stmt->bindParam(":idCodigo", $id, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, 400);

        try {
            $stmt->execute();

            return (object)[
                'status' => 200,
                'message' => $respuesta,
                'data' => (object)[
                    'id' => $id,
                    'usuario' => App::obtenerNombreCompletoUsuario(),
                    'fechaRegistro' => date('d-m-Y h:i a')
                ]
            ];
        } catch (PDOException $e) {
            return (object)[
                'status' => 500,
                'message' => $e->getMessage()
            ];
        }
    }

    public function eliminar($usuario): object
    {
        $db = obtenerConexion();
        $respuesta = null;

        $query = "EXEC rrhh.sp_eliminarCodigoObservacionPlanillaUnica :id,:usuario,:respuesta;";
        $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
        $stmt->bindParam(":id", $this->id, PDO::PARAM_INT);
        $stmt->bindParam(":usuario", $usuario, PDO::PARAM_INT);
        $stmt->bindParam(":respuesta", $respuesta, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 4000);

        try {
            $stmt->execute();

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