<?php

namespace App\Http\Livewire\Traits;

use App\Models\Polizza;
use Carbon\Carbon;
use App\Models\ReportDataVeicoli;

trait HasPolizza{
    public $currentPolizza;
    public $data_polizze;
    public $compagnia_id;
    public $agenzia;
    public $polizza_num;
    public $valida_dal;
    public $valida_al;
    public $anagrafica_id;
    public $modalType;
    public $veicolo_id;

    protected function getPolizzaRules(){
        return [
            'compagnia_id' => 'required',
            'polizza_num' => 'required',
            'valida_dal' => 'required',
            'valida_al' => 'required',
            'anagrafica_id' => 'required'
        ];
    }

    public function getPolizza($polizza){
        if ($polizza > 0) {
            $ret = Polizza::with('compagnia')->with('anagrafica')->findOrFail($polizza);
            return $ret->agenzia . " " .
                   ($ret->compagnia ? $ret->compagnia->name : '') . " " .
                   ($ret->anagrafica ? ($ret->anagrafica->lastname . " " . $ret->anagrafica->firstname) : '');
        }
        return "";
    }

    public function addPolizza(){
        $this->resetPolizza();
        $this->currentPolizza = 99;
        $this->emit('load-polizza-modal');
    }

    public function removePolizza(){
        $vehicle = ReportDataVeicoli::find($this->veicolo_id);
        if ($vehicle) {
            $vehicle->polizze = null;
            $vehicle->save();
        }
        $this->data_polizze = 0;
        $this->emit('add-default-value', $this->data_polizze, '', 'data_polizze');
    }

    public function editPolizza(){
        $this->currentPolizza = $this->data_polizze;
        $this->editPolizzaData($this->data_polizze);
        $this->emit('load-polizza-modal');
    }
    public function savePolizza()
    {
        $this->validate($this->getPolizzaRules());

        $polizza = Polizza::create([
            'anagrafica_id' => $this->anagrafica_id,
            'compagnia_id' => $this->compagnia_id,
            'agenzia' => $this->agenzia,
            'polizza_num' => $this->polizza_num,
            'valida_dal' => $this->valida_dal,
            'valida_al' => $this->valida_al,
        ]);

        $this->data_polizze = $polizza->id;

        $vehicle = ReportDataVeicoli::find($this->veicolo_id);
        if ($vehicle) {
            $vehicle->polizze = $this->data_polizze;
            $vehicle->save();
        }

        $this->dispatchBrowserEvent('hide-polizza-modal');
        $this->emit('polizza-saved', $polizza->id, $this->getPolizza($polizza->id));

    }


    private function resetPolizza(){
        $this->compagnia_id = null;
        $this->agenzia = null;
        $this->polizza_num = null;
        $this->valida_dal = null;
        $this->valida_al = null;
        $this->anagrafica_id = null;
    }

    public function cleanPolizzaData(){
        $this->resetPolizza();
        $this->currentPolizza = null;
    }

    private function editPolizzaData($id){
        if ($id) {
            $polizza = Polizza::with(['anagrafica', 'compagnia'])->find($id);
            if ($polizza) {
                $this->compagnia_id = $polizza->compagnia_id;
                $this->agenzia = $polizza->agenzia;
                $this->polizza_num = $polizza->polizza_num;
                $this->valida_dal = $polizza->valida_dal;
                $this->valida_al = $polizza->valida_al;
                $this->anagrafica_id = $polizza->anagrafica_id;

                $this->emit('updatePolizzaSelects', [
                    'anagrafica' => [
                        'id' => $polizza->anagrafica_id,
                        'text' => $this->getAnagrafica($polizza->anagrafica_id)
                    ],
                    'compagnia' => [
                        'id' => $polizza->compagnia_id,
                        'text' => $polizza->compagnia ? $polizza->compagnia->name : ''
                    ],
                    'agenzia' => $polizza->agenzia
                ]);
            }
        }
    }

    public function addAnagraficaPolizza(){
        $this->resetAnagrafica();
        $this->currentAnagrafica = 99;
        $this->modalType = 'polizza';
        $this->emit('load-anagrafica-modal');
    }

    public function removeAnagraficaPolizza(){
        $this->anagrafica_id = 0;
        $this->emit('add-default-value', $this->anagrafica_id, '', 'anagrafica_id');
    }

    public function editAnagraficaPolizza(){
        $this->currentAnagrafica = $this->anagrafica_id;
        $this->modalType = 'polizza';
        $this->editAnagrafica($this->anagrafica_id);
        $this->emit('load-anagrafica-modal');
    }
}
