<?php
class CuentaEmpresarial
{
    public $codempresa;
    public $numero_cuenta;
    public $tipo_cuenta;
    public $codbanco;
    public $nombre_banco;
    public $montofinanciado;
    public $cantidadcuotas;
    public $periodicidad;
    public $valorcuota;
    public $tasanormal;
    public $tasamora;
    public $saldocapital;
    public $garantias;
    public $destino;
    public $observaciones;
    public $clasificariesgo;
    public $referencia;
    public $fecha_otorgamiento;
    public $fecha_dia_corte;
    public $fecha_ultimo_pago;
    public $fecha_proximo_pago;
    public $nombre_empresa;
    public $codclasificacion;

    public function __construct()
    {
        !empty($this->fecha_otorgamiento) && $this->fecha_otorgamiento = date('d-m-Y', strtotime($this->fecha_otorgamiento));
        !empty($this->fecha_dia_corte) && $this->fecha_dia_corte = date('d-m-Y', strtotime($this->fecha_dia_corte));
        !empty($this->fecha_ultimo_pago) && $this->fecha_ultimo_pago = date('d-m-Y', strtotime($this->fecha_ultimo_pago));
        !empty($this->fecha_proximo_pago) && $this->fecha_proximo_pago = date('d-m-Y', strtotime($this->fecha_proximo_pago));

        !empty($this->montofinanciado) && $this->montofinanciado = '$' . number_format($this->montofinanciado, 2, '.', ',');
        !empty($this->valorcuota) && $this->valorcuota = '$' . number_format($this->valorcuota, 2, '.', ',');
        !empty($this->saldocapital) && $this->saldocapital = '$' . number_format($this->saldocapital, 2, '.', ',');
        !empty($this->tasanormal) && $this->tasanormal = number_format($this->tasanormal, 2, '.', ',') . '%';
    }

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

        $query = self::obtenerQuery() . ' WHERE saldocapital > 0 AND cuentas.codtipocta = 1;';
        $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED]);

        try {
            $stmt->execute();

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

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

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

        $query = self::obtenerQuery() . ' WHERE saldocapital > 0 AND cuentas.codtipocta = 0;';
        $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED]);

        try {
            $stmt->execute();

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

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

    public static function obtenerQuery(): string
    {
        return 'select cuentas.codempresa,
            cuentas.numcuenta numero_cuenta,
            cuentas.nomtipocta tipo_cuenta,
            cuentas.codbanco,
            cuentas.nombanco nombre_banco,
            cuentas.montofinanciado,
            cuentas.cantidadcuotas,
            cuentas.nomtipoperiodo periodicidad,
            cuentas.valorcuota,
            cuentas.tasanormal,
            cuentas.tasamora,
            cuentas.saldocapital,
            cuentas.garantias,
            cuentas.destino,
            cuentas.observaciones,
            cuentas.clasificariesgo,
            cuentas.referencia,
            cuentas.fechaotorgado fecha_otorgamiento,
            cuentas.fechadiacorte fecha_dia_corte,
            cuentas.fechaultpago fecha_ultimo_pago,
            cuentas.fechaproxpago fecha_proximo_pago,
            empresas.nomempresa nombre_empresa,
            bancos.codclasificacion
        from [' . DB_NET . '].dbo.v_bnc_cuentas_c_p cuentas
        inner join [' . DB_NET . '].dbo.gen_empresa empresas on cuentas.codempresa = empresas.codempresa
        left join [' . DB_NET . '].dbo.gen_banco bancos on cuentas.codempresa = bancos.codempresa and cuentas.codbanco = bancos.codbanco';
    }

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

        $query = "EXEC [" . DB_NET . "].dbo.p_bnc_resumen_cpcc :codempresa";
        $stmt = $db->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED]);
        $stmt->bindValue(":codempresa", CODEMPRESA, PDO::PARAM_INT);

        try {
            $stmt->execute();

            $datos = $stmt->fetchAll(PDO::FETCH_OBJ);

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