<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use CodeIgniter\HTTP\ResponseInterface;
use Config\Clients;
use Config\Database;
use App\Models\VentasModel;
use App\Libraries\FacturacionElectronica;


class Consulta extends BaseController
{
    public function index($isc, $codGeneracion){
        $fileType = $this->request->getGet('f');
        $action = $this->request->getGet('a');
        $inline = true;
        if($action == 'download'){
            $inline = false;
        }
        if($fileType && ($fileType == 'json' || $fileType == 'pdf')){
            return $this->obtenerArchivo($isc, $codGeneracion, $fileType, $inline);
        }
        else{
            return $this->sitioConsulta($isc, $codGeneracion);
        }
    }

    public function _index($isc, $codGeneracion)
    {
       if($isc && $codGeneracion)
       {
            $client = new Clients();
            $dbgroup = $client->getDBGroup($isc);
            if ($dbgroup) 
            {
                $database = new Database();

                $dbConf = $database->getDatabaseConfig($dbgroup);
                $db = \Config\Database::connect($dbConf);
                
                $systemVersion = $client->getSystem($isc);
                $feStartDate = $client->getFeStartDate($isc);
                
                $ventasModel = new VentasModel($systemVersion, $db);
                $venta = $ventasModel->getSaleByCodGeneracion($codGeneracion);
                
                if($venta)
                {
                    $feEnv = $client->getFeEnv($isc);
                    $facturacionElectronica = new FacturacionElectronica($feEnv);
                    $dte = $facturacionElectronica->consultarDTE($venta['dteCodGeneracion']);
                    
                    if($dte)
                    {
                       
                    }
                    else
                    {
                        echo "$codGeneracion no disponible, intente mas tarde. (ERR: 004)";
                    }
                }
                else
                {
                    echo "DTE con $codGeneracion no encontrado. (ERR: 003)";
                }
            }
            else
            {
                echo 'Parametros de consulta inválidos. (ERR: 002)';
            }
       }
       else
       {
           echo 'Parametros de consulta ausentes (ERR: 001)';
       }
    }
    private function obtenerArchivo($isc, $codGeneracion, $fileType, $inline = true){
        if($isc && $codGeneracion)
        {
            $client = new Clients();
            $feEnv = $client->getFeEnv($isc);
            if($feEnv){
                $facturacionElectronica = new FacturacionElectronica($feEnv);
                    $dte = $facturacionElectronica->consultarDTE($codGeneracion);
                    if(isset($dte['json']))
                    {
                        $dteEstado = isset($dte['estado']) ? $dte['estado'] : '';
                        if($dteEstado == 'PROCESADO'){
                            $file = $facturacionElectronica->generarArchivosDTE($dte, [
                                    'logo' => $client->getLogo($isc),
                                    'comercial' => $client->getComercial($isc),
                                    'nombre' => $client->getNombre($isc),
                                    'telefono' => $client->getTelefono($isc),
                                    'correo' => $client->getCorreo($isc)
                            ], strtoupper($fileType));

                            if($file['json']){
                                    $showFile = $file[strtolower($fileType)];
                                    header('Content-Type: ' . $showFile['type']);
                                    header('Content-Disposition: '.(!$inline ? "attachment;" : "" ).'  filename="'.$showFile['name'].'"');
                                    echo $showFile['content'];
                                    exit;
                            }
                        }
                        else{
                             $data = [
                                'logo' => $client->getLogo($isc),
                                'errMsg' => 'La transmisión del DTE con número de control <strong>'.$codGeneracion.'</strong> ha fallado. Por favor, verifica el número o pongase en contacto con <b>'.$client->getComercial($isc).'</b> para solicitar más información. <br>(ERR: 006)',
                            ];
                            return view('consulta/consulta_dte_error_view.php', $data);
                        }
                    }
                    else
                    {
                        echo "$codGeneracion no disponible, intente mas tarde. (ERR: 004)";
                    }
            }
            else{
                echo 'Parametros de consulta inválidos. (ERR: 002)';
            }
        }
        else
        {
            echo 'Parametros de consulta ausentes (ERR: 001)';
        }
    }
    
    private function sitioConsulta($isc, $codGeneracion){
        if($isc && $codGeneracion){
            $client = config('Clients');// new Clients();
            $feEnv = $client->getFeEnv($isc);

            if($feEnv){
                $facturacionElectronica = new FacturacionElectronica($feEnv);
                $dte = $facturacionElectronica->consultarDTE($codGeneracion);
                if($dte){
                    $dteEstado = isset($dte['estado']) ? $dte['estado'] : '';
                    if($dteEstado == 'PROCESADO'){

                        $dteCliente = 
                        (isset($dte['json']['receptor']['nombre']) ? $dte['json']['receptor']['nombre'] : 
                        (isset($dte['json']['sujetoExcluido']['nombre']) ? $dte['json']['sujetoExcluido']['nombre'] :
                        (isset($dte['json']['donante']['nombre']) ? $dte['json']['donante']['nombre'] : '')));
                        //hack ltv
                        if($dte['json']['identificacion']['codigoGeneracion'] == 'FE6CEBA4-B30D-76C9-24EF-4A2AB150A77A'){
                            $dteCliente = 'INNOVACION EN TECNOLOGIA, S.A. DE C.V.';
                        }
                        

                        $dteFecha = isset($dte['fechaDeEvento']) ? $dte['fechaDeEvento'] : '';
                        //$dteCliente = isset($dte['json']['receptor']['nombre']) ? $dte['json']['receptor']['nombre'] : '';
                        $dteNumero = isset($dte['numeroControl']) ? $dte['numeroControl'] : '';
                        $dteCodigoGen = isset($dte['codigoDeGeneracion']) ? $dte['codigoDeGeneracion'] : '';
                        $dteTotal = isset($dte['json']['resumen']['totalPagar']) ? "$ ".number_format($dte['json']['resumen']['totalPagar'], 2, '.', '') : '';

                        $dteAmbiente =  isset($dte['json']['identificacion']['ambiente']) ? $dte['json']['identificacion']['ambiente'] : '';
                        $dteEmision = isset($dte['json']['identificacion']['fecEmi']) ? $dte['json']['identificacion']['fecEmi'] : '';

                        $dteConsultaMH = "https://admin.factura.gob.sv/consultaPublica?ambiente={$dteAmbiente}&codGen={$dteCodigoGen}&fechaEmi={$dteEmision}";

                        $data = [
                            /*'dte' => $dte,
                            
                            'ncontrol' => $ncontrol,*/
                            'isc' => $isc,
                            'logo' => $client->getLogo($isc),
                            'comercial' => $client->getComercial($isc),
                            'nombre' => $client->getNombre($isc),
                            'dteCliente' => $dteCliente,
                            'dteFecha' => $dteFecha,
                            'dteNumero' => $dteNumero,
                            'dteCodigoGen' => $dteCodigoGen,
                            'dteTotal' => $dteTotal,
                            'dteConsultaMH' => $dteConsultaMH,
                        ];
                        return view('consulta/consulta_dte_view', $data);
                    }
                    elseif($dteEstado == 'FALLIDO'){
                        $data = [
                            'logo' => $client->getLogo($isc),
                            'errMsg' => 'La transmisión del DTE <strong>'.$codGeneracion.'</strong> ha fallado. Por favor, verifica el número o pongase en contacto con <b>'.$client->getComercial($isc).'</b> para solicitar más información. <br>(ERR: 006)',
                        ];
                        return view('consulta/consulta_dte_error_view.php', $data);
                    }
                    else{
                        $data = [
                            'logo' => $client->getLogo($isc),
                            'errMsg' => 'El número de factura que has ingresado aún no ha sido procesado o no existe en nuestros registros. Por favor, verifica el número o intenta nuevamente más tarde. <br> (ERR: 005)',
                        ];
                        return view('consulta/consulta_dte_error_view.php', $data);
                    }
                }
                else{
                    $data = [
                        'logo' => $client->getLogo($isc),
                        'errMsg' => $codGeneracion+' no disponible. Por favor, verifica el número o intenta nuevamente más tarde. <br> (ERR: 004)',
                    ];
                    return view('consulta/consulta_dte_error_view.php', $data);
                }
            }
            else{
                $data = [
                    'logo' => $client->getLogo($isc),
                    'errMsg' => 'Parámetros de consulta inválidos, verifica los datos e intenta nuevamente. <br> (ERR: 002)',
                ];
                return view('consulta/consulta_dte_error_view.php', $data);
            }

        }
        else{
            $data = [
                'logo' => $client->getLogo($isc),
                'errMsg' => 'Parámetros de consulta ausentes, verifica los datos e intenta nuevamente. <br> (ERR: 001)',
            ];
            return view('consulta/consulta_dte_error_view.php', $data);
        }
    }
}
