<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use App\Danoral\Entidades\SyncEntidades;
use App\Danoral\Entidades\Entidad;

class MigrarEntidadesEdifApto extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'migrar:entidades-edif-apto {codEdif?}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Migrar los datos de Edif/Apto del sysActual al sysNuevo';



    /**
     * Execute the console command.
     * GRANT ALL    ON ALL SEQUENCES IN SCHEMA admin TO versio6_danoral_api
     *
     * @return int
     */
    public function handle()
    {
        $codEdif = $this->argument('codEdif');

        $this->migrar($codEdif);
        //$this->cambio_ano_dolarizado_EE();


    }

    public function migrar($codEdif = null, $ano = null)
    {
        $conexion_danoral = (new Entidad)->getCN_jsys($ano, 1);

        echo 'Migracion de Edificios/Apartamentos'. PHP_EOL;
        echo "conexion danoral: $conexion_danoral" .PHP_EOL;

        $res = 0;
        $mJSON = new MigrarEntidadesJSON;

        if(empty($codEdif)) {
            $edif_do = [
                4189,
                4760,
                8910,
                4876,
                4482,
                1157,
                4247,
                3934,
                8799,
            ];
    
        }else{
            $edif_do = [
                $codEdif
            ];
        }


        //Edificios
        $e_edif = DB::connection($conexion_danoral)
            ->table('entidades')
            ->leftJoin('entidadesedif', 'entidades.id_Entidad', '=', 'entidadesedif.id_Entidad')
            ->where([
                ['id_TipoEntidad', 2],
                ['cod_Entidad', '<>', ''],
                //['dolarizado_EE', '>', 0], // solo dolarizados
                //['dolarizado_EE', null], // solo NO dolarizados
            ])
            ->orderBy('cod_Entidad', 'asc')
            ->get();

        $i_edif = 0;
        $i_apto = 0;
        foreach ($e_edif as $e) {
            $i_edif += 1;
            
            if(!in_array(intval($e->cod_Entidad), $edif_do)){ continue; } //solo lista

            echo '('.$i_edif.') Edificio: '.$e->cod_Entidad.' - '.$e->nombre_Entidad .PHP_EOL;

            //if(intval($e->cod_Entidad) < 7928){ continue; } //desde un Edif
            //if(intval($e->cod_Entidad) > 7928){ continue; } //hasta un Edif

            //if($e->id_Entidad < 202000000){ continue; }

            $idE = SyncEntidades::cambioID_edif($e->id_Entidad);

            $res = DB::table('admin.entidades')
                ->updateOrInsert(
                    [
                        'idE' => $idE
                    ],
                    [
                        'typeE' => 2,
                        'enableE' => $e->activo_Entidad,
                        'idESuper' => SyncEntidades::cambioID_edif($e->id_EntidadPadre),
                    ]
                );
            //$this->info('actualizacion : '.$res);

            $datose = [
                ['idE' => $idE, 'typeED' => 1100, 'valueED' => trim($e->nombre_Entidad)],
                ['idE' => $idE, 'typeED' => 1006, 'valueED' => trim($e->RIF_Entidad)],
                ['idE' => $idE, 'typeED' => 1007, 'valueED' => trim($e->nombreRIF_EE)],
                ['idE' => $idE, 'typeED' => 1036, 'valueED' => $e->RIF_valido_Entidad],
                ['idE' => $idE, 'typeED' => 1029, 'valueED' => trim($e->direccion_EE)],
                ['idE' => $idE, 'typeED' => 1041, 'valueED' => trim($e->cod_Entidad)],
                ['idE' => $idE, 'typeED' => 1042, 'valueED' => $e->Intereses_EE],
                ['idE' => $idE, 'typeED' => 1043, 'valueED' => $e->PorcInt_Edif_EE],
                ['idE' => $idE, 'typeED' => 1044, 'valueED' => $e->PorcInt_Admni_EE],
                ['idE' => $idE, 'typeED' => 1045, 'valueED' => $e->MesesDesdeInt_EE],
                ['idE' => $idE, 'typeED' => 1046, 'valueED' => $e->formatoRecibo_EE],
                ['idE' => $idE, 'typeED' => 1047, 'valueED' => $e->porc6_EE],
                ['idE' => $idE, 'typeED' => 1048, 'valueED' => $e->comboProvincial_EE],
                ['idE' => $idE, 'typeED' => 1049, 'valueED' => $e->montoFijo_EE],
                ['idE' => $idE, 'typeED' => 1050, 'valueED' => $e->fechaIngreso_EE],
                ['idE' => $idE, 'typeED' => 1051, 'valueED' => $e->alicuota_EE],
                ['idE' => $idE, 'typeED' => 1052, 'valueED' => $e->NIT_EE],
                ['idE' => $idE, 'typeED' => 1053, 'valueED' => $e->dolarizado_EE],
            ];


            foreach ($datose as $dE) {
                $typeED = $dE['typeED'];
                $valueED = $dE['valueED'];

                if (!empty($valueED)) {
                     $res = DB::table('admin.entidades_datos')
                    ->updateOrInsert(
                        [
                            'idE' => $idE,
                            'typeED' => $typeED
                        ],
                        [
                            'valueED' => $valueED
                        ]
                    );

                    //$this->info('       -'.$typeED. ' : ' .$valueED.' : '.$res);
                }
            }

            //Apartamentos
            $e_apto = DB::connection($conexion_danoral)
            ->table('entidades')
            ->leftJoin('entidadesapto', 'entidades.id_Entidad', '=', 'entidadesapto.id_Entidad')
            ->where([
                ['id_TipoEntidad', 3],
                ['cod_Entidad', '<>', ''],
                ['id_EntidadPadre', $e->id_Entidad],
            ])
            ->get();

            $datosAptos = [];
            $i_apto_edif = 0;
            foreach ($e_apto as $a) {
                $i_apto++;
                $i_apto_edif++;

                echo '*';
                
                //$idE_a_old = self::cambioID_apto($a->id_Entidad);
                $idE_a = SyncEntidades::cambioID_apto($a->id_Entidad);
                
                /*
                if($a->id_Entidad == 203000924){
                    $this->info('.');
                    $this->info('('.$i_apto.') ('.$a->id_Entidad.'-'.$idE_a.') '.$e->cod_Entidad. ' - '.$a->cod_Entidad.' : '.$a->nombre_Entidad);
                    $this->info('.');
                }
                */

                $res = DB::table('admin.entidades')
                    ->updateOrInsert(
                        [
                            'idE' => $idE_a
                        ],
                        [
                            'typeE' => 3,
                            'enableE' => $a->activo_Entidad,
                            'idESuper' => $idE,
                        ]
                    );


                //SOLO PARA CAMBIO DE ID (caso 202)
                //if($idE_a_old != $idE_a){
                //    self::cambio_idE_apto($idE_a_old, $idE_a);
                //}


                $datosA = [
                    ['idE' => $idE_a, 'typeED' => 1100, 'valueED' => trim($a->nombre_Entidad)],
                    ['idE' => $idE_a, 'typeED' => 1006, 'valueED' => trim($a->RIF_Entidad)],
                    ['idE' => $idE_a, 'typeED' => 1036, 'valueED' => $a->RIF_valido_Entidad],
                    ['idE' => $idE_a, 'typeED' => 1012, 'valueED' => $a->email_EA],
                    ['idE' => $idE_a, 'typeED' => 1013, 'valueED' => trim($a->telefonos_EA)],
                    ['idE' => $idE_a, 'typeED' => 1051, 'valueED' => $a->alicuota_EA],
                    ['idE' => $idE_a, 'typeED' => 1061, 'valueED' => $a->status_EA],
                    ['idE' => $idE_a, 'typeED' => 1062, 'valueED' => $a->statusUbicacion_EA],
                    ['idE' => $idE_a, 'typeED' => 1063, 'valueED' => trim($a->codVal_EA)],
                    ['idE' => $idE_a, 'typeED' => 1064, 'valueED' => trim($a->codCliente_EA)],
                    ['idE' => $idE_a, 'typeED' => 1065, 'valueED' => $a->cobroIntereses_EA],
                    ['idE' => $idE_a, 'typeED' => 1066, 'valueED' => trim($a->cod_Entidad)],
                ];

                foreach ($datosA as $dA) {
                    $typeED =  $dA['typeED'];
                    $valueED = $dA['valueED'];
                    $labelED = null;

                    //if($typeED == 1064){ $valueED = ' '; } //blanquea codCliente

                    if (!empty($valueED)) {
                        $res = DB::table('admin.entidades_datos')
                            ->updateOrInsert(
                                [
                                    'idE' => $idE_a,
                                    'typeED' => $typeED,
                                    'labelED' => $labelED,
                                ],
                                [
                                    'valueED' => $valueED
                                ]
                            );
                        //$this->info('       -'.$typeED. ' : ' .$valueED.' : '.$res);
                    }
                }

                //entidades datos web
                $ed_web = DB::connection($conexion_danoral)
                    ->table('versio6_web.datos_entidad')
                    ->join('entidades', 'versio6_web.datos_entidad.id_Entidad', '=', 'entidades.id_Entidad')
                    ->where([
                        ['entidades.activo_Entidad', true],
                        ['estatus', 1],
                        ['entidades.id_Entidad', $a->id_Entidad]
                    ])
                    ->orderBy('versio6_web.datos_entidad.fecha', 'asc')
                    ->get();

                $cont = 0;
                foreach ($ed_web as $ed) {

                    //$this->info('---> datos_web:'.$cont++.' : ('.$ed->id_Entidad.') valor: '.$ed->valor_dato.' - '.$ed->tipo_dato);

                    switch($ed->tipo_dato){
                        case 1: //telefono celular
                            $typeED =  1013;
                            $labelED =  4010;
                        break;

                        case 2: //telefono fijo
                            $typeED =  1013;
                            $labelED =  4011;
                        break;

                        case 3: //correo
                            $typeED =  1012;
                            $labelED =  4510;
                        break;
                    }
                    $statusED = 1;
                    $valueED = $ed->valor_dato;
                    $dateED = $ed->fecha;

                    if (!empty($valueED)) {
                        $res = DB::table('admin.entidades_datos')
                            ->updateOrInsert(
                                [
                                    'idE' => $idE_a,
                                    'typeED' => $typeED,
                                    'labelED' => $labelED,
                                ],
                                [
                                    'valueED' => $valueED,
                                    'dateED' => $dateED,
                                    'statusED' => $statusED
                                ]
                            );

                    }
                }
            }
            $res = DB::table('admin.entidades_datos')
                ->updateOrInsert(
                    [
                        'idE' => $idE,
                        'typeED' => 9100
                    ],
                    [
                        'valueED' => date("Y-m-d H:i:s")
                    ]
                );

            $mJSON->migrarJSON($idE);

            echo '<--: (' . $i_apto_edif . ')'. PHP_EOL;


        }
    }

    private static function cambio_idE_apto($idE_old, $idE_new)
    {
        echo PHP_EOL;

        $tablas = [
            'entidades_datos',
            'abonos',
            'cobros',
            'cuotas',
            'noti_pagos',
            'transdt'
        ];

        foreach($tablas as $t){
            echo $t;
            $res = DB::table('admin.' . $t)
                ->where('idE', $idE_old)
                ->update(
                    ['idE' => $idE_new]
                );
            echo ': ' . $res . PHP_EOL;
        }

        $res = DB::table('admin.entidades')
            ->where('idE', $idE_old)
            ->delete();
        echo 'delete: ' . $idE_old . ': '. $res . PHP_EOL;
    }

    private static function cambioID_apto ($id)
    {
        $idNew = $id;

        if($idNew > 200000000){
            $idNew -= 203000000;
            $idNew += 60000;
        } else {
            $idNew -= 103000000;
        }
        $idNew += 100100030000000000;

        return $idNew;
    }

    private function cambio_ano_dolarizado_EE() {
        $this->info('Migracion de Edificios/Apartamentos');

        //Edificios
        $e_edif = DB::connection('mysql_danoral25')
            ->table('entidades')
            ->leftJoin('entidadesedif', 'entidades.id_Entidad', '=', 'entidadesedif.id_Entidad')
            ->where([
                ['id_TipoEntidad', 2],
                ['cod_Entidad', '<>', ''],
                ['dolarizado_EE', '>', 0], // solo dolarizados
            ])
            ->orderBy('cod_Entidad', 'asc')
            ->get();

        $i_edif = 0;
        foreach ($e_edif as $e) {
            $i_edif += 1;
            $this->info('('.$i_edif.') Edificio: '.$e->cod_Entidad.' - '.$e->nombre_Entidad. ' | dolarizado: '. $e->dolarizado_EE);
        
            DB::connection('mysql_danoral')
                ->table('entidadesedif')
                ->where([
                    ['id_Entidad', $e->id_Entidad],
                ])
                ->update(['dolarizado_EE' => $e->dolarizado_EE]);
        }
    }


}
