<?php

namespace App\Danoral\Bancos\sysOLD;

use Illuminate\Support\Facades\DB;
use Illuminate\Database\Eloquent\Model;
use App\Danoral\Bancos\sysOLD\ListaBanco;
use App\Danoral\Bancos\Banco as BancoNew;
use App\Danoral\Entidades\EDatoType;
use App\Danoral\Entidades\SyncEntidades;
use App\Danoral\Entidades\Entidad;

class Banco extends Model
{
    protected $connection = 'mysql_danoral';
    protected $table = 'bancos';
    protected $primaryKey = 'cod_Cuenta';
    public $incrementing = false;
    public $timestamps = false;

    public function ListaBanco(){
        return $this->hasOne(ListaBanco::class, 'id_Banco', 'id_Banco');
    }

    public static function getListaBancos_Entidad($idEF){
        $lBEF = Banco::
            leftJoin('lista_bancos', 'bancos.id_Banco', '=', 'lista_bancos.id_Banco')
            ->where([
                ['bancos.id_EntidadFamilia', $idEF],
            ])
            ->get();

        return $lBEF;

    }

    public static function migrarBancos(){
        echo 'INICIO' . PHP_EOL;
        $bancos = DB::connection('mysql_danoral')
            ->table('bancos')
            ->Join('lista_bancos', 'bancos.id_Banco', '=', 'lista_bancos.id_Banco')
            ->Join('cuentas', 'bancos.cod_Cuenta', '=', 'cuentas.cod_Cuenta')
            ->orderBy('bancos.cod_Cuenta', 'asc')
            ->get();

        foreach($bancos as $b){
            echo $b->cod_Cuenta . PHP_EOL ;

            $idE = SyncEntidades::cambioID_edif($b->id_EntidadFamilia);

            $e = Entidad::find($idE);

            if(!$e){
                echo "entidad $b->id_EntidadFamilia no se encontro";
                print_r($b);
                continue;
            }

            $bn = new BancoNew();
            $bn->codBanco = trim($b->cod_Banco);
            $bn->idE = $idE;
            $bn->typeCuenta = 1;
            $bn->nroCuenta = $b->numCTA_banco==null?"0000000000":trim($b->numCTA_banco);
            $bn->idMoneda = 1001;
            $bn->codCuenta = '001';
            $bn->visiblePago = true;
            $bn->heredable = true;
            $bn->ctaSysOld = $b->cod_Cuenta;
            $bn->save();

        }

        echo 'FIN';
        return;
    }

    public static function addBancoJSYS(BancoNew $banco, $zona_banco, $addJSys){

        # Agrega el banco en el sistema JSys 
        //$addJSys = true; (se resuelve en las variabres de entrada)

        print_r($banco->attributes);

        $idE_jSys = ($banco->idE > 1000)?SyncEntidades::cambioID_edif_R($banco->idE):$banco->idE;

        $datose = $banco->Entidad->getDatosE();         
        $alias = '0'. strval($banco->ctaSysOld);

        //lista_bancos
        $listaBanco = DB::connection('mysql_danoral')
            ->table('lista_bancos')
            ->Where('cod_Banco', $banco->codBanco)
            ->first();

        $idBanco = 0;
        $nombre_cuenta = 'BANCO';
        if($listaBanco) {
            $idBanco = $listaBanco->id_Banco;
            $nombre_cuenta = $listaBanco->nombre_Banco ." - ". $datose->cod->value;
        }    

        $cuenta = [
            'cod_Cuenta'            => $banco->ctaSysOld,
            'nombre_Cuenta'         => $nombre_cuenta,
            'tipo_Cuenta'           => 'BANCO',
            'mascara_Cuenta'        => '###',
            'alias_Cuenta'          => $alias,
            'id_Entidad'            => $idE_jSys,
            'aplicaRetISLR_Cuenta'  => 0,
            'cta0'                  => $alias,
        ];

        $bancoJSys = [
            'cod_Cuenta'            => $banco->ctaSysOld,
            'id_Banco'              => $idBanco,
            'numCTA_banco'          => $banco->nroCuenta,
            'nombreTitular_banco'   => $datose->rif_nombre->value,
            'RIFTitular_banco'      => $datose->rif_numero->value,
            'id_EntidadFamilia'     => $idE_jSys,
            'zona_banco'            => $zona_banco,
            'visiblePago_banco'     => 1,
        ];

        DB::beginTransaction();
        try {

            $banco->save();

            if($addJSys){
                echo 'addJSys'.PHP_EOL; 
                DB::connection('mysql_danoral')
                    ->table('cuentas')
                    ->insert($cuenta);
                echo '...mysql_danoral:cuentas'.PHP_EOL;    
                  
                DB::connection('mysql_danoral')
                    ->table('bancos')
                    ->insert($bancoJSys);
                echo '...mysql_danoral:bancos'.PHP_EOL;                               
            }

            DB::commit();
            echo '*commit'.PHP_EOL;

        }catch (\Exception $e) {
            DB::rollback();

            echo '+++++++++++++++++++++++++++++++++++++++++++++++  rollback'.PHP_EOL ;
            var_dump($e->getMessage());
        }
    }

}
