<?php

namespace App\Http\Livewire;

use App\Helpers\DateHelper;
use App\Models\Anagrafica;
use App\Models\ReportDataPedoni;
use Livewire\Component;

class Istat extends Component
{

    const LOCALIZZAZIONE_INCIDENTE_IN = 1;
    const LOCALIZZAZIONE_INCIDENTE_OUT = 2;

    const VISIBILITA_BUONA = 1;
    const VISIBILITA_LIMITATA = 2;

    const FONDO_STRADALE_SPECIFICA_OPTION_VALUE = 5;
    const PARTICOLARITA_STRADA_SPECIFICA_OPTION_VALUE = 5;

    const TRAFFICO_NORMALE = 1;
    const TRAFFICO_SCARSO = 2;
    const TRAFFICO_INTENSO = 3;

    const TIPO_STRADA_ALTRO_OPTION_VALUE = 8;

    const SEGNALETICA_ASSENTE = 1;
    const SEGNALETICA_VERTICALE = 2;
    const SEGNALETICA_ORIZZONTALE = 3;
    const SEGNALETICA_VERTICALE_ORIZZONTALE = 4;
    const SEGNALETICA_TEMPORANEA_CANTIERE = 5;

    const SEGNALETICA_VERTICALE_LIMITE_VELOCITA_OPTION_VALUE = 21;
    const SEGNALETICA_VERTICALE_PANNELLO_INTEGRATIVO_OPTION_VALUE = 22;
    const SEGNALETICA_VERTICALE_ALTRO_OPTION_VALUE = 23;


    const LINEA_CONTINUA = 1;
    const LINEA_TRATTEGGIATA = 2;
    const LINEA_TRATTEGGIATA_IN_CORRISPONDENZA = 3;
    const SEGNALETICA_ORIZZONTALE_LINEA_ASSENTE = 4;

    const MAX_PARTI_COINVOLTE = 10;
    const MAX_VEHICLES = 4;
    const MAX_PASSEGGERI = 4;
    const MAX_INFORTUNATI = 4;
    const MAX_PEDONI = 4;
    const MAX_TESTI_OCULARI = 4;

    const STATO_VEICOLO_MARCIA = 1;
    const STATO_VEICOLO_SOSTA = 2;
    const STATO_VEICOLO_NON_PRESENTE = 3;

    const POSIZIONE_STATICA_FINALE_DOCUMENTAZIONE_FOTOGRAFICA = 1;
    const POSIZIONE_STATICA_FINALE_RILIEVO_PLANIMETRICO = 2;
    const POSIZIONE_STATICA_FINALE_SCHIZZO_VISTA_NO_SCALA = 3;
    const POSIZIONE_STATICA_FINALE_GIA_RIMOSSO = 4;

    const DESTINAZIONE_VEICOLO_RIMOSSO_SENSI_ART_2028_CC = 1;
    const DESTINAZIONE_VEICOLO_SEQUESTRO_ART_354_CPP = 2;
    const DESTINAZIONE_VEICOLO_SEQUESTRO_ART_321_CPP = 3;
    const DESTINAZIONE_VEICOLO_SEQUESTRO = 4;
    const DESTINAZIONE_VEICOLO_SEQUESTRO_AMMINISTRATIVO = 5;
    const DESTINAZIONE_VEICOLO_FERMO_AMMINISTRATIVO = 6;
    const DESTINAZIONE_VEICOLO_RITIRATO_DAL_CONDUCENTE = 7;

    const STATO_PNEUMATICI_REGOLAMENTARE = 1;
    const STATO_PNEUMATICI_BUONO = 2;
    const STATO_PNEUMATICI_SUFFICIENTE = 3;
    const STATO_PNEUMATICI_INSUFFICIENTE = 4;
    const STATO_PNEUMATICI_NON_RILEVATO = 5;

    const STATO_PRESENTE = 1;
    const STATO_NON_PRESENTE = 2;
    const STATO_FUNZIONANTE = 1;
    const STATO_NON_FUNZIONANTE = 2;
    const STATO_NON_RILEVATO = 3;

    const YES = 1;
    const NO = 0;

    const SI_RISERVA = 3;

    const PATENTE_AL_SEGUITO_NON_PREVISTA = 3;

    const CONDUCENTE_GENERALIZZATO_LUOGO = 1;
    const CONDUCENTE_GENERALIZZATO_OSPEDALE = 2;
    const CONDUCENTE_GENERALIZZATO_ALTRO = 3;

    const INFORTUNATO_INCOLUME = 0;
    const INFORTUNATO_FERITO = 1;
    const INFORTUNATO_DECEDUTO_24H = 2;
    const INFORTUNATO_DECEDUTO_30GG = 3;

    const MARCIA_OPTION_N = 0;
    const MARCIA_OPTION_1 = 1;
    const MARCIA_OPTION_2 = 2;
    const MARCIA_OPTION_3 = 3;
    const MARCIA_OPTION_4 = 4;
    const MARCIA_OPTION_5 = 5;
    const MARCIA_OPTION_6 = 6;
    const MARCIA_OPTION_R = 7;
    const MARCIA_NON_RILEVATA = 8;
    const MARCIA_OPTION_AUTO = 9;

    const CRISTALLO_OPTION_INTERNO = 1;
    const CRISTALLO_OPTION_ESTERNO = 2;
    const CRISTALLO_OPTION_ALTRO = 3;

    const ESITO_NEGATIVO = 1;
    const ESITO_POSITIVO = 2;

    const DOCUMENTO_CI = 1;
    const DOCUMENTO_PAT = 2;
    const DOCUMENTO_PP = 3;
    const DOCUMENTO_ALTRO = 4;

    const PEDONE_PRESENTE_E_POSIZIONE = 1;
    const PEDONE_SOCCORSO_E_PRESSO = 2;

    const TESTE_PRESENTE_MOMENTO_RILIEVO = 1;
    const TESTE_NON_PRESENTE_MOMENTO_RILIEVO = 2;
    const TESTE_DICHIARA_LUOGO_INCIDENTE = 3;
    const TESTE_DICHIARA_PRONTO_SOCCORSO = 4;
    const TESTE_DICHIARA_PROSEGUO_TEMPO = 5;

    const PATENTE_CATEGORIA_AM = 'AM';
    const PATENTE_CATEGORIA_A1 = 'A1';
    const PATENTE_CATEGORIA_A1B = 'A1B';
    const PATENTE_CATEGORIA_A2 = 'A2';
    const PATENTE_CATEGORIA_A = 'A';
    const PATENTE_CATEGORIA_AB = 'AB';
    const PATENTE_CATEGORIA_B1 = 'B1';
    const PATENTE_CATEGORIA_B = 'B';
    const PATENTE_CATEGORIA_BE = 'BE';
    const PATENTE_CATEGORIA_C1 = 'C1';
    const PATENTE_CATEGORIA_C1E = 'C1E';
    const PATENTE_CATEGORIA_C = 'C';
    const PATENTE_CATEGORIA_CE = 'CE';
    const PATENTE_CATEGORIA_D1 = 'D1';
    const PATENTE_CATEGORIA_D1E = 'D1E';
    const PATENTE_CATEGORIA_DE = 'DE';
    const PATENTE_CATEGORIA_E = 'E';

    const PATENTE_ABILITAZIONI_CQC = 1;
    const PATENTE_ABILITAZIONI_CAP = 2;
    const PATENTE_ABILITAZIONI_CFC = 3;

    const DOCUMENTO_RILASCIATO_COMUNE = 1;
    const DOCUMENTO_RILASCIATO_MOTORIZZAZIONE_CIVILE = 2;
    const DOCUMENTO_RILASCIATO_ALTRO = 3;
    const DOCUMENTO_RILASCIATO_MCTC = 4;
    const DOCUMENTO_RILASCIATO_MIT = 5;
    const DOCUMENTO_RILASCIATO_UCO = 6;
    const DOCUMENTO_RILASCIATO_PREFETTURA = 7;

    const PATENTE_PRESCRIZIONI_OBBLIGO_LENTI = 1;
    const PATENTE_PRESCRIZIONI_APPARECCHIO_ACUSTICO = 2;
    const PATENTE_PRESCRIZIONI_LIMITAZIONI_ART_117 = 3;

    const PROTOCOLLO_NUM_LENGTH = 3;

    protected $paginationTheme = 'bootstrap';

    public $title = 'ISTAT';

    public $from = '2023-11-01', $to;

    protected $rules = [
        'from' => 'required',
        'to' => 'required',
    ];

    protected $messages = [
        'from.required' => 'La data inizio è obbligatoria',
        'to.required' => 'La data fine è obbligatoria',
    ];

    public function resetFields(){
        $this->from = '';
        $this->to = '';
    }

    public function render()
    {
        return view('livewire.istat');
    }

    public function export()
    {

        $items =  \DB::table('fcf_reports_reports')
            ->leftjoin('fcf_users','fcf_reports_reports.created_by','=','fcf_users.id')
            ->selectRaw('fcf_reports_reports.*, CONCAT(fcf_users.firstname," ",fcf_users.lastname) AS display_name')
            ->where(function ($query) {
                $query->where('fcf_reports_reports.incidente_con_feriti', '1')
                ->orWhere('fcf_reports_reports.incidente_mortale', '=', '1');
            })
            ->where('fcf_reports_reports.verificatosi_in_data', '>=', $this->from != '' ? $this->from : '2000-01-01')
            ->where('fcf_reports_reports.verificatosi_in_data', '<=', $this->to != '' ? $this->to : '2050-01-01')
            /*->where(function ($query) {
                $query->where('fcf_reports_reports.verificatosi_in_data', '>=', $this->from)
                ->where('fcf_reports_reports.verificatosi_in_data', '<=', $this->to);
            })*/
            ->orderBy('fcf_reports_reports.verificatosi_in_data')
        ->get();

        $txt = array();

        foreach($items as $item)
        {

            $report = \App\Models\Report::findOrFail($item->id);

            $item_data = '';

            //1-10
            $town_code = $prov_code = '000';
            $town = \App\Models\LocationTown::findOrFail($item->localita_uno);
            if($town)
            {
                if($town->istat_code) $town_code = $town->istat_code;
                $prov = \App\Models\LocationProvince::where('code', $town->prov)->first();
                if($prov && $prov->istat_code) $prov_code = $prov->istat_code;
            }

            $item_data .= date('y', strtotime($item->verificatosi_in_data));
            $item_data .= date('m', strtotime($item->verificatosi_in_data));
            $item_data .= str_pad($prov_code,3,'0',STR_PAD_LEFT);
            $item_data .= str_pad($town_code,3,'0',STR_PAD_LEFT);
            $item_data .= str_repeat(' ',4);
            $item_data .= date('d', strtotime($item->verificatosi_in_data));
            $item_data .= str_repeat(' ',2);
            $item_data .= '4';
            $item_data .= str_repeat(' ',5);
            $item_data .= ' ';

            //11-20
            if($item->localizzazione_incidente == Istat::LOCALIZZAZIONE_INCIDENTE_IN)
            {
                switch($item->nomenclatura_strada) {
                    case 2: $loc = 2; break;
                    case 3: $loc = 0; break;
                    case 4: $loc = 3; break;
                    default: $loc = 1;
                }
            }
            elseif($item->localizzazione_incidente == Istat::LOCALIZZAZIONE_INCIDENTE_OUT)
            {
                switch($item->nomenclatura_strada) {
                    case 2: $loc = 5; break;
                    case 3: $loc = 9; break;
                    case 4: $loc = 6; break;
                    default: $loc = 4;
                }
            }
            else $loc = ' ';

            $tipo_strada = ' ';
            $types_saved = \App\Models\ReportTipoStrada::where('report_id', $report->id)->select('tipo_strada_id')->get()->toArray();
            // $types_saved = $report->getReportTipoStrada();
            if($types_saved)
            {
                if(in_array(3,$types_saved) && in_array(1,$types_saved))
                    $tipo_strada = 1;
                elseif(in_array(3,$types_saved) && (in_array(11,$types_saved) || in_array(2,$types_saved)))
                    $tipo_strada = 2;
                elseif(in_array(4,$types_saved))
                    $tipo_strada = 3;
            }

            $pav = ' ';
            if($item->pavimentazione)
                switch($item->pavimentazione)
                {
                    case 5:
                    case 6:
                        $pav = 3; break;
                    default:
                        if(!$item->condizione_strada || $item->condizione_strada == 1) $pav = 1;
                        else $pav = 2;
                }

            $int = ' ';
            switch($item->particolarita_strada)
            {
                case 1: $int = '07'; break;
                case 2: $int = '01'; break;
                case 3: $int = '08'; break;
                case 4: $int = '02'; break;
                case 5: $int = '10'; break;
                case 6:
                case 10:$int = '09'; break;
                case 7: $int = '06'; break;
                case 12:$int = '04'; break;
            }

            $fon = ' ';
            if($item->fondo_stradale)
                switch($item->fondo_stradale)
                {
                    case 1: $fon = 1; break;
                    case 2: $fon = 2; break;
                    case 3: $fon = 4; break;
                    case 4: $fon = 5; break;
                    case 5: $fon = 3; break;
                }

            $seg = ' ';
            if($item->segnaletica)
                switch($item->segnaletica)
                {
                    case Istat::SEGNALETICA_ASSENTE: $seg = 1; break;
                    case Istat::SEGNALETICA_VERTICALE: $seg = 2; break;
                    case Istat::SEGNALETICA_ORIZZONTALE: $seg = 3; break;
                    case Istat::SEGNALETICA_VERTICALE_ORIZZONTALE: $seg = 4; break;
                    case Istat::SEGNALETICA_TEMPORANEA_CANTIERE: $seg = 5; break;
                }


            $met = ' ';
            if($item->condizioni_atmosferiche)
                switch($item->condizioni_atmosferiche)
                {
                    case 1: $met = 1; break;
                    case 2: $met = 2; break;
                    case 3: $met = 3; break;
                    case 4: $met = 2; break;
                    case 5: $met = 7; break;
                    case 6: $met = 1; break;
                    case 7: $met = 4; break;
                    case 8: $met = 5; break;
                    case 9: $met = 6; break;
                }


            $item_data .= $loc;
            $item_data .= str_pad($item->nomenclatura_strada_numero,3,' ',STR_PAD_RIGHT);
            $item_data .= str_repeat(' ',3);
            $item_data .= str_repeat(' ',2);
            $item_data .= $tipo_strada;
            $item_data .= $pav;
            $item_data .= $int;
            $item_data .= $fon;
            $item_data .= $seg;
            $item_data .= $met;

            //21-30
            $tipo_urto = str_repeat(' ',2);
            $types_saved = \App\Models\ReportTipoUrto::where('report_id', $report->id)->select('tipo_urto_id')->get()->toArray();
            // $types_saved = $report->getReportTipoUrto();
            if($types_saved)
            {
                if(in_array(1,$types_saved))
                    $tipo_urto = '01';
                elseif(in_array(2,$types_saved))
                    $tipo_urto = '02';
                elseif(in_array(3,$types_saved) || in_array(26,$types_saved) || in_array(27,$types_saved))
                    $tipo_urto = '04';
                elseif(in_array(5,$types_saved))
                    $tipo_urto = '03';
                elseif(in_array(7,$types_saved) || in_array(12,$types_saved))
                    $tipo_urto = '05';
                elseif(in_array(4,$types_saved) || in_array(21,$types_saved))
                    $tipo_urto = '07';
                elseif(in_array(8,$types_saved))
                    $tipo_urto = '06';
                elseif(in_array(6,$types_saved) || in_array(19,$types_saved) || in_array(14,$types_saved))
                    $tipo_urto = '08';
                elseif(in_array(9,$types_saved) || in_array(18,$types_saved))
                    $tipo_urto = '10';
                elseif(in_array(25,$types_saved) || in_array(22,$types_saved) || in_array(13,$types_saved))
                    $tipo_urto = '12';
            }

            $item_data .= $tipo_urto;

            $v_data = array(
                'tipo' => '',
                'circostanze' => '',
                'veicolo' => '',
                'conducente_passeggeri' => '',
                'pedoni' => '',
                'cittadinanza_conducente' => ''
            );

            $deceduti_24h = array();
            $deceduti_30gg = array();
            $feriti = array();

            $data_veicoli = \App\Models\ReportDataVeicoli::where('report_id', $report->id)->get()->toArray();

            for($i = 0; $i < 3; $i++)
            {
                $data_veicolo = isset($data_veicoli[$i]) ? $data_veicoli[$i] : false;
                $stato_psico_fisico = str_repeat(' ',2);

                if($data_veicolo)
                {
                    if ($data_veicolo["veicoli"] > 0)
                    {
                        $veicolo = \App\Models\Vehicle::findOrFail($data_veicolo["veicoli"]); //(ArrayHelper::getValue($data_veicolo, 'veicoli', 0));
                        $v_tipo = str_repeat(' ',2);
                        switch($veicolo->tipo_id)
                        {
                            case 1:
                                switch($veicolo->destinazione_uso)
                                {
                                    case \App\Models\Vehicle::DESTINAZIONE_USO_PRIVATO: $v_tipo = '01'; break;
                                    case \App\Models\Vehicle::DESTINAZIONE_USO_PUBBLICO: $v_tipo = '03'; break;
                                    case \App\Models\Vehicle::DESTINAZIONE_USO_SOCCORSO_POLIZIA: $v_tipo = '04'; break;
                                    default: $v_tipo = '01'; break;
                                }
                                break;
                            case 17: $v_tipo = '02'; break;
                            case 7:
                                if($veicolo->destinazione_uso == \App\Models\Vehicle::DESTINAZIONE_USO_SERVIZO_PUBBLICO_DI_LINEA)
                                    $v_tipo = '05';
                                else
                                    $v_tipo = '06';
                                break;
                            case 16: $v_tipo = '08'; break;
                            case 14:
                            case 20: $v_tipo = '09'; break;
                            case 18: $v_tipo = '10'; break;
                            case 8:  $v_tipo = '13'; break;
                            case 6:  $v_tipo = '14'; break;
                            case 3:  $v_tipo = '15'; break;
                            case 5:  $v_tipo = '17'; break;
                            case 19: $v_tipo = '18'; break;
                            case 4:  $v_tipo = '21'; break;
                        }

                        $v_data['tipo'] .= $v_tipo;

                        $v_data['veicolo'] .= $veicolo->foreign_country ?
                            str_repeat(' ',8) :
                            str_pad(substr($veicolo->targa,0,8),8,' ',STR_PAD_RIGHT);

                        $v_data['veicolo'] .= $veicolo->foreign_country ?
                            str_pad($veicolo->getCartaCircolazioneRilasciataDaDiValueAttribute(),3,' ',STR_PAD_RIGHT) :
                            str_repeat(' ',3);

                        $time = strtotime($veicolo->carta_circolazione_rilasciata_il);
                        $v_data['veicolo'] .= str_pad($time && $time > 0 ? date('y',$time) : '',2,' ',STR_PAD_RIGHT);
                        $v_data['veicolo'] .= str_repeat(' ',5);
                    }
                    if($data_veicolo["alcool_test"] && $data_veicolo["alcool_test_esito"] == Istat::ESITO_POSITIVO)
                        $stato_psico_fisico = '90';
                    elseif($data_veicolo["drug_test"] && $data_veicolo["drug_test_esito"] == Istat::ESITO_POSITIVO)
                        $stato_psico_fisico = '94';

                    $conducente = \App\Models\Anagrafica::findOrFail($data_veicolo["conducenti"]);

                    $eta_conducente = '00';
                    if($conducente->birth_date != '' && $report->verificatosi_in_data != '')
                    {
                        $eta_conducente = 0;// * * * DateHelper::calculateAge($conducente->birth_date,$report->verificatosi_in_data);
                        if($eta_conducente > 100 || $eta_conducente < 0) $eta_conducente = 0;
                        $eta_conducente = str_pad($eta_conducente,2,'0',STR_PAD_LEFT);
                    }
                    $v_data['conducente_passeggeri'] .= $eta_conducente;
                    $v_data['conducente_passeggeri'] .= $conducente->gender == 'F' ? '2' : '1';

                    $details = array(
                        'firstname' => $conducente->firstname,
                        'lastname' => $conducente->lastname,
                        'ospedale' => $data_veicolo["infortunato_ospedale"],
                    );

                    switch($data_veicolo["infortunato"])
                    {
                        case Istat::INFORTUNATO_DECEDUTO_30GG: $infortunato = 4; $deceduti_30gg[] = $details;  break;
                        case Istat::INFORTUNATO_DECEDUTO_24H:  $infortunato = 3; $deceduti_24h[] = $details;   break;
                        case Istat::INFORTUNATO_FERITO:        $infortunato = 2; $feriti[] = $details;         break;
                        default: $infortunato = 1; break;
                    }

                    $v_data['conducente_passeggeri'] .= $infortunato;

                    switch($data_veicolo["conducente_patente_categoria"])
                    {
                        case Istat::PATENTE_CATEGORIA_AM:  $patente = '0'; break;
                        case Istat::PATENTE_CATEGORIA_A1:
                        case Istat::PATENTE_CATEGORIA_A1B:
                        case Istat::PATENTE_CATEGORIA_A2:
                        case Istat::PATENTE_CATEGORIA_A:   $patente = '1'; break;
                        case Istat::PATENTE_CATEGORIA_AB:
                        case Istat::PATENTE_CATEGORIA_B1:
                        case Istat::PATENTE_CATEGORIA_B:   $patente = '2'; break;
                        case Istat::PATENTE_CATEGORIA_C1:
                        case Istat::PATENTE_CATEGORIA_C:   $patente = '3'; break;
                        case Istat::PATENTE_CATEGORIA_D1:  $patente = '4'; break;
                        case Istat::PATENTE_CATEGORIA_BE:
                        case Istat::PATENTE_CATEGORIA_C1E:
                        case Istat::PATENTE_CATEGORIA_CE:
                        case Istat::PATENTE_CATEGORIA_D1E:
                        case Istat::PATENTE_CATEGORIA_DE:
                        case Istat::PATENTE_CATEGORIA_E:   $patente = '5'; break;
                        default:                            $patente = '9'; break;
                    }

                    $v_data['conducente_passeggeri'] .= $patente;

                    $patente_rilasciata_il = $data_veicolo["conducente_patente_rilasciata_il"];
                    $v_data['conducente_passeggeri'] .= $patente_rilasciata_il ? date('y',strtotime($patente_rilasciata_il)) :  str_repeat(' ',2);
                    $v_data['conducente_passeggeri'] .= str_repeat(' ',4);

                    $datiPasseggeri = \App\Models\ReportDataPasseggeri::where('progressive', $i)->where('report_id', $report->id)->get()->toArray();
                    for ($j = 0; $j < 4; $j++)
                    {

                        $passeggero_data = str_repeat(' ',4);
                        if(isset($datiPasseggeri[$j]))
                        {

                            $passeggero = $datiPasseggeri[$j]["passeggero"];


                            if($passeggero)
                            {
                                $passeggero_infortunato = $datiPasseggeri[$j]["infortunato"];
                                if($passeggero_infortunato != Istat::INFORTUNATO_INCOLUME)
                                {

                                    $passeggero_anagrafica = \App\Models\Anagrafica::findOrFail($passeggero);

                                    $eta_passeggero = '00';
                                    if($passeggero_anagrafica->birth_date && $report->verificatosi_in_data)
                                    {
                                        $eta_passeggero = 0; // * * *DateHelper::calculateAge($passeggero_anagrafica->birth_date,$report->verificatosi_in_data);
                                        if($eta_passeggero == 0) $eta_passeggero = 1;
                                        elseif($eta_passeggero > 100 || $eta_passeggero < 0) $eta_passeggero = 0;
                                        $eta_passeggero = str_pad($eta_passeggero,2,'0',STR_PAD_LEFT);
                                    }

                                    $passeggero_data = sprintf('%s%s%s',
                                        $passeggero_infortunato == Istat::INFORTUNATO_FERITO ? '2' : '1',
                                        $eta_passeggero,
                                        $passeggero_anagrafica->gender == 'F' ? '4' : '3'
                                    );

                                    $details = array(
                                        'firstname' => $passeggero_anagrafica->firstname,
                                        'lastname' => $passeggero_anagrafica->lastname,
                                        'ospedale' => $datiPasseggeri[$j]["infortunato_ospedale"]
                                    );

                                    switch($passeggero_infortunato)
                                    {
                                        case Istat::INFORTUNATO_DECEDUTO_30GG: $deceduti_30gg[] = $details;  break;
                                        case Istat::INFORTUNATO_DECEDUTO_24H:  $deceduti_24h[] = $details;   break;
                                        case Istat::INFORTUNATO_FERITO:        $feriti[] = $details;         break;
                                    }
                                }
                            }
                        }

                        $v_data['conducente_passeggeri'] .= $passeggero_data;
                    }

                    $v_data['conducente_passeggeri'] .= str_repeat(' ',8);

                    $v_data['cittadinanza_conducente'] .= $conducente->nazionalita == 0 ? '1' : '2';
                    $country_id = 106;
                    if($conducente->nazionalita != 0)
                        $country_id = $conducente->nazione_straniera;
                    if(!$country_id) $v_data['cittadinanza_conducente'] .= str_repeat(' ',33);
                    else
                    {
                        $country = \App\Models\LocationCountry::findOrFail($country_id);
                        $v_data['cittadinanza_conducente'] .= str_pad($country->istat_code,3,' ',STR_PAD_RIGHT);
                        $v_data['cittadinanza_conducente'] .= str_pad(preg_replace('[^A-Z ]', '', strtoupper($country->name)),30,' ',STR_PAD_RIGHT);
                    }



                }
                else
                {
                    $v_data['tipo'] .= str_repeat(' ',2);
                    $v_data['veicolo'] .= str_repeat(' ',18);
                    $v_data['conducente_passeggeri'] .= str_repeat(' ',35);
                    $v_data['pedoni'] .= str_repeat(' ',24);
                    $v_data['cittadinanza_conducente'] .= str_repeat(' ',34);
                }

                if($i < 2)
                {
                    $v_data['circostanze'] .= '00';
                    $v_data['circostanze'] .= str_repeat(' ',2);
                    $v_data['circostanze'] .= $stato_psico_fisico;
                }


            }
            $p_data = '';

            $datiPedoni = \App\Models\ReportDataPedoni::where('report_id', $report->id)->get()->toArray();
            for($j = 0; $j < 4; $j++)
            {

                $pedone_data = str_repeat(' ',6);

                if (isset($datiPedoni[$j]))
                {
                    $pedone = $datiPedoni[$j]["pedoni"];

                    if($pedone)
                    {
                        $pedone_infortunato = $infortunato;
                        if($pedone_infortunato != Istat::INFORTUNATO_INCOLUME)
                        {
                            $pedone_anagrafica = new Anagrafica([$pedone]);

                            $eta_pedone = '00';
                            if(DateHelper::filterDate($pedone_anagrafica->get('birth_date')) && DateHelper::filterDate($report->get('verificatosi_in_data')))
                            {
                                $eta_pedone = DateHelper::calculateAge($pedone_anagrafica->get('birth_date'),$report->get('verificatosi_in_data'));
                                if($eta_pedone == 0) $eta_pedone = 1;
                                elseif($eta_pedone > 100 || $eta_pedone < 0) $eta_pedone = 0;
                                $eta_pedone = str_pad($eta_pedone,2,'0',STR_PAD_LEFT);
                            }

                            if($pedone_infortunato == Istat::INFORTUNATO_FERITO)
                                $pedone_data = sprintf('%s%s%s',
                                    str_repeat(' ',3),
                                    $pedone_anagrafica->get('gender') == 'F' ? '4' : '3',
                                    $eta_pedone
                                );
                            else
                                $pedone_data = sprintf('%s%s%s',
                                    $pedone_anagrafica->get('gender') == 'F' ? '2' : '1',
                                    $eta_pedone,
                                    str_repeat(' ',3)
                                );

                            $details = array(
                                'firstname' => $pedone_anagrafica->get('firstname'),
                                'lastname' => $pedone_anagrafica->get('lastname'),
                                'ospedale' => ReportDataPedoni::where('report_id', $report->id)
                                ->where('progressive', $j)
                                ->value('infortunato_ospedale')
                            );

                            switch($pedone_infortunato)
                            {
                                case Istat::INFORTUNATO_DECEDUTO_30GG: $deceduti_30gg[] = $details;  break;
                                case Istat::INFORTUNATO_DECEDUTO_24H:  $deceduti_24h[] = $details;   break;
                                case Istat::INFORTUNATO_FERITO:        $feriti[] = $details;         break;
                            }
                        }
                    }
                }

                $p_data .= $pedone_data;
            }


            $item_data .= $v_data['tipo'];
            $item_data .= str_repeat(' ',24);
            $item_data .= $v_data['circostanze'];
            $item_data .= $v_data['veicolo'];
            $item_data .= $v_data['conducente_passeggeri'];
            $item_data .= $p_data;
            $item_data .= str_repeat(' ',10);
            $item_data .= str_pad(count($deceduti_24h),2,'0',STR_PAD_LEFT);
            $item_data .= str_pad(count($deceduti_30gg),2,'0',STR_PAD_LEFT);
            $item_data .= str_pad(count($feriti),2,'0',STR_PAD_LEFT);
            $item_data .= str_repeat(' ',9);

            /*

            $location_description = Helper::getStradarioAddressById($report->get('localita_due'));
            if($report->get('intersezione_con'))
                $location_description .= ' ' . sprintf(__('ISTAT_INTERSEZIONE_CON', 'reports'),Helper::getStradarioAddressById($report->get('intersezione_con')));

            if($report->get('prossimita_civico'))
                $location_description .= ' ' . sprintf(__('ISTAT_PROSSIMITA_CIVICO', 'reports'),$report->get('prossimita_civico'));

            if($report->get('prossimita_chilometro'))
                $location_description .= ' ' . sprintf(__('ISTAT_PROSSIMITA_CHILOMETRO', 'reports'),$report->get('prossimita_chilometro'));

            $item_data .= str_pad(substr(preg_replace('[^A-Za-z-0-9 ]','',strtoupper($location_description)),0,57),57,' ');

            $item_data .= str_repeat(' ',100);

            $deceduti = array_merge($deceduti_24h, $deceduti_30gg);
            for($i = 0; $i < 4; $i++)
            {
                $deceduto = ArrayHelper::getValue($deceduti, $i);

                $deceduto_data = str_repeat(' ',60);
                if($deceduto) $deceduto_data = sprintf('%s%s',
                        str_pad(substr($deceduto['firstname'],0,30),30,' '),
                        str_pad(substr($deceduto['lastname'],0,30),30,' ')
                    );

                $item_data .= $deceduto_data;
            }

            for($i = 0; $i < 8; $i++)
            {
                $ferito = ArrayHelper::getValue($feriti, $i);

                $ferito_data = str_repeat(' ',90);
                if($ferito) $ferito_data = sprintf('%s%s%s',
                    str_pad(substr($ferito['firstname'],0,30),30,' '),
                    str_pad(substr($ferito['lastname'],0,30),30,' '),
                    str_pad(substr($ferito['ospedale'],0,30),30,' ')
                );

                $item_data .= $ferito_data;
            }

            $item_data .= str_repeat(' ',10);
            $item_data .= str_repeat(' ',102);
            $item_data .= str_repeat(' ',8);

            $ora = $report->get('verificatosi_in_data_ora');
            $ora = $ora === '' ? '25' : str_pad(substr($ora,0,2),2,'0',STR_PAD_LEFT);
            $item_data .= $ora;

            $minuti = (int) $report->get('verificatosi_in_data_minuti');
            if($ora == '25') $minuti = '  ';
            $item_data .= str_pad(substr($minuti,0,2),2,'0',STR_PAD_LEFT);

            $item_data .= str_repeat(' ',30);
            $item_data .= str_repeat('0',7);
            $item_data .= str_repeat(' ',15);
            $item_data .= str_repeat(' ',4);
            $item_data .= str_repeat(' ',100);

            $item_data .= str_pad(substr(LocationHelper::getTown($report->get('localita_uno'))->title,0,40),40,' ');

            $item_data .= str_repeat(' ',40);
            $item_data .= str_repeat(' ',10);

            $item_data .= $v_data['cittadinanza_conducente'];
            */

            $txt[] = $item_data;
        }

        $txt_data = implode("\n", $txt);

        return response()->streamDownload(function () use($txt_data) {
            echo  $txt_data;
        }, 'istat_' . $this->from . "_" . $this->to . '.txt');

        /*$txt_filename = sprintf(__('ISTAT_TXT_FILENAME', $mainframe->getOption()),
            $model->getState('filter_date_from'),
            $model->getState('filter_date_to')
            );*/
        // return view('livewire.istat');



    }

}
