<?php

namespace App\Danoral\Cuotas;

use App\Danoral\Cuotas\CuotaView;
use App\Danoral\Entidades\Entidad;
use App\Danoral\Entidades\EDatoType;
use App\Http\Resources\CuotaCond as CuotaCondResources;
use Illuminate\Support\Facades\DB;


class CuotaCond 
{
    public $idE;
    public $idCond;
    public $typeEmisionCond;
    public $ano;
    public $mes;
    public $refCond;
    public $sumMontoCuota;
    public $descripcion = "";

    public $sumBS_cobro;
    public $sumBS;
    public $sumUSD;
    public $idMoneda_cobro = 1001;

    public $entidad;
    public $cuotas = [];

    public $isPagado;


    public function getPeriodo(){
        if($this->mes && $this->ano){
            return ($this->mes<10?'0'.$this->mes: $this->mes) . '/' . $this->ano;
        }else if($this->refCond){
            return ('ref/' . $this->refCond);
        }else{
            return '';
        }
    }


    public static function getCuotasCond(
            $idE,
            $idCondCV = null, 
            $cuotasPendientes = true, 
            $dateCalculoTasa = null,
            $idT = null,
        ) {

        $cuotasPendientes = ($cuotasPendientes=='true'?true:false);
               
        if(is_null($idCondCV)){
            if($cuotasPendientes){            
                $cuotasView = CuotaView::getCuotasViewPendientes_entidad($idE);
            }else{
                if(is_null($idT)){
                    $cuotasView = CuotaView::getCuotasView_entidad($idE);
                }else{
                    $cuotasView = new CuotaView;
                    $cuotasView->setSchema_ano(CuotaView::getYearID($idT));
                    $cuotasView = $cuotasView->getCuotasView_trans($idT);
                }
            }
        }else{
            $cuotasView = CuotaView::getCuotasView_cond($idCondCV);
        }

        return CuotaCond::loadCuotasCond($cuotasView, $dateCalculoTasa, $idCondCV, $idT);
    }

    public static function loadCuotasCond(
        $cuotasView,
        $dateCalculoTasa = null,
        $idCondCV = null,         
        $idT = null,
    ) {

        //$dateCalculoTasa = null; //activar para tener las cuotas a tasa de emision
        
        $cuotasCond = [];

        //cuotas
        $cuotas = [];
        $sumMontoCuota = 0;

        $sumBS_cobro = 0;
        $sumBS = 0;
        $sumUSD = 0;
        $descripcion ='';

        foreach($cuotasView as $i=>$cv){
            //grupo definicion de cuotaCond
            $idE = $cv->idE;
            $anomes = strval($cv->anoDT).strval($cv->mesDT);
            
            $idCond = $cv->idCond;
            $mCuota = floatval($cv->montoDT);

            if(is_null($dateCalculoTasa) || $dateCalculoTasa == 'null'){
                $dateCalculoTasa = $cv->tcEmision_date;
            }
                
            $cv->calcularTasa($dateCalculoTasa);
            $sumMontoCuota += $cv->tcCobro_montoCuota;

            switch($cv->idMoneda){
                case 1001: //VES
                    $sumBS += $mCuota;
                    break;
                case 1002: //USD
                    $sumUSD += $mCuota;
                    
                    $descripcion =
                        number_format($cv->tcCobro_montoCuota, 2, ',', '.').'@'.
                        number_format($cv->tcCobro_valor, 4, ',', '.').
                        '['.date("d-m-Y",strtotime($cv->tcCobro_date)).'] $';
                    
                    break;
            }
            $sumBS_cobro += $cv->tcCobro_montoCuota;
        
            $cuotas[] = $cv;

            $isCuotaCondEnd = false;

            //no es ultimo elemento
            if ($cv != $cuotasView->last())  {

                $cvNext = $cuotasView->get($i+1);
                $anomesNext = strval($cvNext->anoDT).strval($cvNext->mesDT);
                $isCuotaCondEnd = ($anomes != $anomesNext || $idE != $cvNext->idE);

            //ultimo elemto
            }else{
                $isCuotaCondEnd = true;
            }

            if($isCuotaCondEnd){
                $cc = new CuotaCond;
                $cc->idE = $cv->idE;
                $cc->ano = $cv->anoDT;
                $cc->mes = $cv->mesDT;
                $cc->idCond = $idCond;
                $cc->sumMontoCuota = $sumMontoCuota;
                $cc->cuotas = $cuotas;

                $cc->sumBS_cobro = $sumBS_cobro;
                $cc->sumBS = $sumBS;
                $cc->sumUSD = $sumUSD;

                $cc->descripcion = $descripcion;

                if(!is_null($idCondCV) || !is_null($idT)){
                    $cc->entidad = Entidad::find($cv->idE); 
                }

                $cuotasCond[] = $cc;

                //inicializacion siguiente CuotaCond
                $cuotas = [];
                $sumMontoCuota = 0;

                $sumBS_cobro = 0;
                $sumBS = 0;
                $sumUSD = 0;
                $descripcion ='';
            }
        }
        return $cuotasCond;
    }


    public static function getDeudaEdif($idEdif, $isTasaEmision = false){

        $e_aptos = Entidad::where([
            ['idESuper', $idEdif],
        ])
        ->orderBy(DB::raw("FORMAT('%10s', \"datose\"->'cod'->>'value')::bytea"), 'asc')
        ->get();

        $AptosCuotasCond = [];
        $totalVES = 0;
        $totalUSD = 0;
        $totalCuotaCond = 0;
        foreach($e_aptos as $i => $ea){
            $ea->loadDatos();
            if($isTasaEmision){
                $cuotasCond = self::getCuotasCond($ea->idE, null, true, null);
            }else{
                $cuotasCond = self::getCuotasCond($ea->idE, null, true, date('Y-m-d'));
            }

            $sumVES = 0;
            $sumUSD = 0;
            $sumCuotaCond = 0;
            foreach($cuotasCond as $cc){
                foreach($cc->cuotas as $c){
                    switch($c->idMoneda){
                        case 1001: //VES
                            $sumVES += $c->montoDT;
                            $totalVES += $c->montoDT;
                            break;
                        case 1002: //USD
                            $sumUSD += $c->montoDT;
                            $totalUSD += $c->montoDT;
                            break;
                    }
                    $sumCuotaCond += $c->tcCobro_montoCuota;
                    $totalCuotaCond += $c->tcCobro_montoCuota;
                }
            }

            $apto = [
                'codApto'           => $ea->getDato(EDatoType::$DATO_TYPE_APTO_COD),
                'nombreApto'        => $ea->getDato(EDatoType::$DATO_TYPE_NAME),
                'countCuotasCond'   => count($cuotasCond),
                'sumVES'            => number_format($sumVES, 2, ',', '.'),
                'sumUSD'            => number_format($sumUSD, 2, ',', '.'),
                'sumCuotaCond'      => number_format($sumCuotaCond, 2, ',', '.'),
                'cuotasCond'        => CuotaCondResources::collection($cuotasCond),
            ];
            array_push($AptosCuotasCond, $apto);
        }

        return [
            'idEdif'            => $idEdif,
            'totalVES'          => number_format($totalVES, 2, ',', '.'),
            'totalUSD'          => number_format($totalUSD, 2, ',', '.'),
            'totalCuotaCond'    => number_format($totalCuotaCond, 2, ',', '.'),
            'AptosCuotasCond'   => $AptosCuotasCond,
        ];

    }
}
