<?php

namespace App\Livewire;

use Livewire\Component;
use App\Models\Territorio;
use App\Models\Proclamatore;
use App\Models\Assegnazione;
use App\Models\AnnoTeocratico;
use App\Models\Campagna;
use App\Models\Setting;

class Home extends Component
{
    public function render()
    {
        $settings = Setting::instance();
        $annoCorrente = AnnoTeocratico::corrente();
        $campagnaAttiva = Campagna::attiva();

        // Territory counts
        $totTerritoriAttivi = Territorio::where('attivo', true)->count();
        $totAssegnati = Territorio::assegnato()->count();
        $totInReparto = Territorio::inReparto()->count();

        // Coverage: returned territories per current theocratic year
        $territoriPercorsi = 0;
        if ($annoCorrente) {
            $territoriPercorsi = Assegnazione::where('anno_teocratico_id', $annoCorrente->id)
                ->whereNotNull('returned_at')
                ->distinct('territorio_id')
                ->count('territorio_id');
        }

        // Monthly average
        $mediaPercorrenzaMensile = 0;
        if ($annoCorrente && $annoCorrente->mesi_trascorsi > 0) {
            $mediaPercorrenzaMensile = round($territoriPercorsi / $annoCorrente->mesi_trascorsi, 1);
        }

        // Campaign stats
        $campagnaStats = null;
        if ($campagnaAttiva) {
            $campagnaStats = [
                'descrizione' => $campagnaAttiva->descrizione,
                'percentuale' => $campagnaAttiva->percentuale_percorrenza,
                'fine' => $campagnaAttiva->end_date->format('d/m/Y'),
            ];
        }

        // Quick lists
        $daAssegnare = Territorio::daAssegnare()
            ->with('zona', 'tipologia', 'ultimaAssegnazione')
            ->take(10)
            ->get();

        $prioritari = Territorio::prioritari()
            ->with('zona', 'tipologia', 'ultimaAssegnazione')
            ->take(10)
            ->get();

        $daRientrare = Territorio::daRientrare()
            ->with(['zona', 'assegnazioneCorrente.proclamatore'])
            ->take(10)
            ->get();

        return view('livewire.home', [
            'congregazione' => $settings->congregazione_nome ?? 'TerManager2',
            'annoCorrente' => $annoCorrente,
            'totTerritoriAttivi' => $totTerritoriAttivi,
            'totAssegnati' => $totAssegnati,
            'totInReparto' => $totInReparto,
            'territoriPercorsi' => $territoriPercorsi,
            'mediaPercorrenzaMensile' => $mediaPercorrenzaMensile,
            'campagnaStats' => $campagnaStats,
            'daAssegnare' => $daAssegnare,
            'prioritari' => $prioritari,
            'daRientrare' => $daRientrare,
        ]);
    }
}
