<?php

namespace App\Danoral\Cobranzas;

use Illuminate\Support\Facades\DB;

use App\Danoral\ModelBase;
use App\Danoral\Entidades\EntidadView;
use App\Danoral\Bancos\BancoView;
use App\Http\Resources\NotiPago as NotiPagoResources;
use App\Danoral\Entidades\SyncEntidades;
use App\Danoral\Cobranzas\NotiPagoCuotas;
use App\Danoral\Cuotas\CuotaCond;
use App\Danoral\Cuotas\CuotaView;

class NotiPago extends ModelBase
{
    protected $table = 'admin.noti_pagos';
    protected $primaryKey = 'idNP';
    public $incrementing = true;
    public $timestamps = false;

    protected $fillable = [
        'idE',
        'dateNP',
        'typeNP',
        'datePagoNP',
        'montoNP',
        'bancoOrigenNP',
        'bancoNP',
        'cedulaNP',
        'nroRefNP',
        'estadoNP',
        'nroErrorNP',
        'idMoneda',
        'origenNP',
        'logNP'
    ];

    public static $ESTADO_NULL          = null;
    public static $ESTADO_PENDIENTE     = 1;
    public static $ESTADO_PROCESADO     = 2;
    public static $ESTADO_ERROR         = 3;
    public static $ESTADO_NO_EXITOSA    = 4;


    public function EntidadView() {
        return $this->hasOne(EntidadView::class, 'idE', 'idE');
    }
    public function BancoView() {
        return $this->hasOne(BancoView::class, 'idBanco', 'bancoNP');
    }
    public function CuotasView() {
        return $this->hasMany(CuotaView::class, 'idNP', 'idNP');
    }
    public function getCodBancoOrigen() {
        return '0'.strval($this->bancoOrigenNP);
    }

    public function getCuotasCond(){
        return CuotaCond::loadCuotasCond(
            CuotaView::getCuotasView_NotiPago($this->idNP), 
            $this->datePagoNP
        );
    }

    public function procesarNotiPago($np) {
        date_default_timezone_set('America/Caracas');

        DB::beginTransaction();
        try{    

            $idE = $np['idE'];
            if($idE < 999999999){
                $idE = SyncEntidades::cambioID_apto($idE);
            }

            $this->idE              = $idE;
            $this->dateNP           = date('Y-m-d H:i:s');   //$np['dateNP'];
            $this->origenNP         = $np['origen'];

            $pago                   = $np['itemsCFP'][0];
            $this->datePagoNP       = $pago['date'];
            $this->typeNP           = $pago['type'];
            $this->montoNP          = $pago['monto'];
            $this->bancoOrigenNP    = $pago['bancoOrigen'];
            $this->bancoNP          = $pago['banco'];
            $this->cedulaNP         = $pago['cedula'];
            $this->nroRefNP         = $pago['ref'];
            $this->idMoneda         = $pago['idMoneda'];

            $this->save();

            foreach($np['itemsCobro'] as $ic) {
                $cuotasNP = new NotiPagoCuotas;
                $cuotasNP->idNP = $this->idNP;
                $cuotasNP->idCuota = $ic['idCuota'];

                $cuotasNP->save();
            }

            DB::commit();

            return new NotiPagoResources($this);

        }catch (\Exception $e) {
            DB::rollback();
            return [
                'message'   => 'ERROR: '. $e->getMessage(),
            ];
        }

        return [
            'message'   => 'ERROR',
        ];

    }


    public static function getList() {
        //no funciona,.. no terminada...
        return NotiPAgo::select([
                'admin.noti_pagos.idNP',
                'admin.noti_pagos.idE',
                'admin.noti_pagos.dateNP',
                'admin.noti_pagos.montoNP',
                'itemsdt_des.descripcion_itemsdt_des',
                'itemsdt.anoDT',
                'itemsdt.mesDT',
                'itemsdt.dhDT',
                'itemsdt.montoDT',
            ])
            ->leftJoin('admin.entidades as eA', 'eA.idE', '=', 'admin.noti_pagos.idE')
            ->leftJoin('admin.entidades as eE', 'eE.idE', '=', 'eA.idESuper')
            ->get();

    }


}
