<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Solicitud;
use App\Models\Recibo;
use Carbon\Carbon;
use Ayeo\Barcode;

class reciboController extends Controller
{
    function enviar($data){
        // dd($data);
        
        $infoClnt = [
            'evento' => $data['nombEvento'],
            'nombre' => $data['nombCliente'],
            'tipoDocumt' => $data['tipoDoc'],
            'documt' => $data['numDoc']
        ];

        //Informacion del valor
        $infoFinancr = [
            'numOrden' => $this->obtnrNumOrd(),
            'vlrEvnt' => 94000
        ];
        
        //Ejecucion 
        $infoFechas = $this->obtnrFecha();
        
        
        //
        $codigoDeBarras = $this->obtnrCodigoBrrs($infoClnt, $infoFechas, $infoFinancr);

        $this->mostrarCodigo(100000000000000001);
        
        $infoFinancr["codBarras"] = $codigoDeBarras;
        
        $respEncpls = $this->encpslrInfo($infoClnt, $infoFechas, $infoFinancr);

        $condRecb = $this->buscarValdr($respEncpls);

        
        $condGuard = $this->guardar($respEncpls, $condRecb);
        
        // dd($condGuard);
        if ($condGuard == false) {
            $respEncpls = 'Error';   
        }

        return $respEncpls;

    }
    
    function obtnrNumOrd(){
        $consctv = Recibo::max('CONSECUTIVO');
        
        if (!$consctv) {
            $consctv = 0;
        }
        
        $newConsctv = $consctv + 1;

        return $newConsctv;
    }
    
    function obtnrFecha(){
        $array = [];
        
        $periodo = '202410';
        $fechaActual = Carbon::now( );
        $fechaAnio = $fechaActual->year;
        $fechaMes = $fechaActual->month;
        $fechaDia = $fechaActual->day;
        $fechaMaxima = '20240421';
        
        $fechaActual = $fechaActual->format('d-m-Y');
        
        //pruebas
        // $fechaAnio = '2023';
        // $fechaMes = '12';
        // $fechaDia = '21';
        // $fechaActual = '16-11-2023';

        $array["periodo"] = $periodo;
        $array["fechaActual"] = $fechaActual;
        $array["anio"] = $fechaAnio;
        $array["mes"] = $fechaMes;
        $array["dia"] = $fechaDia;
        $array["fechaMax"] = $fechaMaxima;

        return $array;
    }

    function obtnrCodigoBrrs($infoPers, $infoFechas, $infoFinacr){
        $fecha = $infoFechas['fechaMax'];
        $vlrPago = $infoFinacr['vlrEvnt'];
        $documt = $infoPers['documt'];
        $orden = $infoFinacr['numOrden'];
        
        $digts_ord_pago = 15;
        $digts_vlr_pago = 8;

        $cod_refrcia='(415)';
        $cod_emprs='7709998009653';
        $cod_recaudo='(8020)';
        $cod_pago='(3900)';
        $cod_fechRcdo='(96)';

        $ordComplt = $this->agrgrCeros($orden, $digts_ord_pago);
        $vlrPagoComplt = $this->agrgrCeros($vlrPago, $digts_vlr_pago);
        
        $cadnCodigo = $cod_refrcia . $cod_emprs . $cod_recaudo . 
                    $documt . 
                    $ordComplt . 
                    $cod_pago . $vlrPagoComplt . 
                    $cod_fechRcdo . $fecha;
        
        return $cadnCodigo;
    }
    
    function agrgrCeros($vlr, $cantMax){
        $cantCrts = strlen(strval($vlr));
        $cadn = '';

        for ($i=0; $i < ($cantMax-$cantCrts); $i++) { 
            $cadn = $cadn . '0';
        }

        $cadn = $cadn . $vlr;

        return $cadn;
    }

    function encpslrInfo($infoAdicnl, $infoFechas, $infoPago){
        $info = $infoAdicnl;
        $fechas = $infoFechas;
        $pagos = $infoPago; 
        
        $data = [
            'numOrden' => $pagos["numOrden"],
            'name' => $info["nombre"],
            'tipoDocumento' => $info["tipoDocumt"],
            'documento' =>$info["documt"],
            'evento' => $info["evento"],
            'valorEvent' => $pagos["vlrEvnt"],
            'anio' => $fechas["anio"],
            'mes' => $fechas["mes"],
            'dia' => $fechas["dia"],
            'fecha' => $fechas["fechaActual"],
            'periodo' => $fechas["periodo"],
            'codigoDeBarras' => $pagos["codBarras"]
        ];

        return $data;
    }

    // function buscarValdr(Request $request){

    //     $numDoc = $request->documento;
    //     $prog = $request->programa;

    //     $contRecb = Recibo::where('DOCUMENTO', $numDoc)
    //                         ->where('NOMBRE_PROGRAMA', $prog)
    //                         ->where('ESTADO', 'ACTIVO')
    //                         ->count('CONSECUTIVO');
        
    //     if ($contRecb == 0) {
    //         $exist = false;
    //     } else {
    //         $exist = true;
    //     }
        
    //     return response()->json([
    //                 "exist" => $exist
    //             ]);
    // }

    function buscarValdr($data){
        $numDoc = $data['documento'];
        $evnt = $data['evento'];

        $contRecb = Recibo::where('DOCUMENTO', $numDoc)
            ->where('NOMBRE_EVENTO', $evnt)
            ->where('ESTADO', 'ACTIVO')
            ->count('CONSECUTIVO');
        
        if ($contRecb == 0) {
            $exist = false;
        } else {
            $exist = true;
        }
        
        return $exist;
    }

    function actualizarEstdRecb($doc, $evnt){
        $request = Recibo::where('DOCUMENTO', $doc)
            ->where('NOMBRE_EVENTO', $evnt)
            ->where('ESTADO', 'ACTIVO')
            ->update([
                'ESTADO' => 'INVALIDO'
            ]);
    }

    function mostrarCodigo($codigoBarrs){
        
        $codeBuilder = new Barcode\Builder();
        //Seccion codigo de barra
        $codeBuilder->setBarcodeType('gs1-128');
        $codeBuilder->setWidth(600);
        $codeBuilder->setHeight(120);
        
        $codeBuilder->output($codigoBarrs);
        
    }

    function guardar($data,$vldRecb){
        $resp = true;
        
        if ($vldRecb == true) {
            $this->actualizarEstdRecb($data['documento'], $data['evento']);
        }

        $infoRecibo = [
            'CONSECUTIVO' => $data["numOrden"],
            'DOCUMENTO' => $data["documento"],
            'NOMBRE_CLIENTE' => $data["name"],
            'NOMBRE_EVENTO' => $data["evento"],
            'PERIODO' => $data["periodo"],
            'TOTAL_PAGAR' => $data["valorEvent"],
            'ESTADO' => 'ACTIVO'
        ];

        try {
            Recibo::insert($infoRecibo);
            
        } catch (Exception $e) {
            // Si hay una excepción, la inserción falló
            $resp = false;
        }

        return $resp;
        
    }
    

}
