<?php

namespace App\Livewire\Settings;

use Livewire\Component;
use App\Models\Tipologia;

class TipologieIndex extends Component
{
    public string $nuovaTipologia = '';
    public ?int $editingId = null;
    public string $editingNome = '';

    public function addTipologia()
    {
        $this->validate(['nuovaTipologia' => 'required|string|max:100|unique:tipologie,nome']);
        Tipologia::create(['nome' => $this->nuovaTipologia, 'attivo' => true]);
        $this->nuovaTipologia = '';
        session()->flash('success', 'Tipologia aggiunta.');
    }

    public function startEdit(int $id)
    {
        $tipo = Tipologia::findOrFail($id);
        $this->editingId = $id;
        $this->editingNome = $tipo->nome;
    }

    public function saveEdit()
    {
        $this->validate(['editingNome' => "required|string|max:100|unique:tipologie,nome,{$this->editingId}"]);
        $tipo = Tipologia::findOrFail($this->editingId);
        $tipo->update(['nome' => $this->editingNome]);
        $this->editingId = null;
        $this->editingNome = '';
        session()->flash('success', 'Tipologia aggiornata.');
    }

    public function cancelEdit()
    {
        $this->editingId = null;
        $this->editingNome = '';
    }

    public function toggleActive(int $id)
    {
        $tipo = Tipologia::findOrFail($id);
        $tipo->update(['attivo' => !$tipo->attivo]);
    }

    public function deleteTipologia(int $id)
    {
        $tipo = Tipologia::findOrFail($id);
        if ($tipo->territori()->exists()) {
            session()->flash('error', "Impossibile eliminare: la tipologia '{$tipo->nome}' ha territori associati.");
            return;
        }
        $tipo->delete();
        session()->flash('success', "Tipologia '{$tipo->nome}' eliminata.");
    }

    public function render()
    {
        return view('livewire.settings.tipologie-index', [
            'tipologie' => Tipologia::orderBy('nome')->get(),
        ]);
    }
}
