<?php

namespace App\Http\Controllers;

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

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

        //Informacion del valor
        if ($data["nvlProg"] == 'Pregrado') {
            $vlr = 98800;
        } elseif ($data["nvlProg"] == 'Posgrado') {
            $vlr = 116900;
        } else{
            $vlr = 0;
        }
        
        $infoFinancr = [
            'numOrden' => $this->obtnrNumOrd(),
            // 'vlrEvnt' => 95000 borrar
            'vlr' => $vlr
        ];

        $idInscr = $data['idIncripc'];
        
        //Ejecucion 
        $infoFechas = $this->obtnrFecha();
        
        
        //
        $codigoDeBarras = $this->obtnrCodigoBrrs($infoClnt, $infoFechas, $infoFinancr);
        
        $infoFinancr["codBarras"] = $codigoDeBarras;
        
        $respEncpls = $this->encpslrInfo($infoClnt, $infoFechas, $infoFinancr);

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

        return $respEncpls;

    }
    
    function obtnrNumOrd(){
        $consctv = Recibo::max('id');
        
        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['vlr'];

        // $documt = $infoPers['documt'];
        $indntf = (!empty($infoPers['idBnr'])) ? $infoPers['idBnr'] : $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 . 
                    $indntf . 
                    $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;

        $cantCrtOrd = 6;
        $numOrdStd = $this->agrgrCeros($pagos["numOrden"], $cantCrtOrd);
        // dd($numOrdStd);
        
        $data = [
            'numOrden' => $numOrdStd,
            'name' => $info["nombre"],
            'tipoDocumento' => $info["tipoDocumt"],
            'documento' =>$info["documt"],
            'id' =>$info["idBnr"],
            // 'evento' => $info["evento"], borrar
            'valorEvent' => $pagos["vlr"],
            'anio' => $fechas["anio"],
            'mes' => $fechas["mes"],
            'dia' => $fechas["dia"],
            'fecha' => $fechas["fechaActual"],
            'periodo' => $fechas["periodo"],
            'codigoDeBarras' => $pagos["codBarras"]
        ];

        return $data;
    }

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

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

    function actualizarEstdRecb($doc){
        $request = Recibo::where('DOCUMENTO', $doc)
            // ->where('NOMBRE_EVENTO', $evnt) borrar
            ->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,$idIns){
        $resp = true;
        
        // if ($vldRecb == true) {
        // $this->actualizarEstdRecb($data['documento']/*,$data['evento'] borrar*/);
        // }

        $fechaFrmt =\DateTime::createFromFormat('d-m-Y',$data["fecha"])->format('Y-m-d');

        $infoRecibo = [
            'numero_orden' => $data["numOrden"],
            'inscripciones_id' => $idIns,
            'fecha_expedicion' => $fechaFrmt,
            'valor_total' => $data["valorEvent"]//, cuando arregle el actualizar estado
            // 'estado' => 1,       cuando arrelge el actualizar estado
        ];

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

        return $resp;
    }
}
