<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Stabile;
use App\Models\UnitaImmobiliare;
use App\Models\Condomino;
use App\Models\Ticket;
use Illuminate\Support\Facades\DB;

class DatiTestRealisticiSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->command->info('🏗️ Creazione dati di test realistici...');

        // 1. Crea stabili di test
        $stabili = $this->creaStabili();
        
        // 2. Crea unità immobiliari
        $this->creaUnitaImmobiliari($stabili);
        
        // 3. Crea condomini di test
        $this->creaCondomini();
        
        // 4. Crea tickets di test
        $this->creaTickets();

        $this->command->info('✅ Dati di test creati con successo!');
        $this->command->info('📊 Statistiche:');
        $this->command->info('   - Stabili: ' . Stabile::count());
        $this->command->info('   - Unità: ' . UnitaImmobiliare::count());
        $this->command->info('   - Condomini: ' . Condomino::count());
        $this->command->info('   - Tickets: ' . Ticket::count());
    }

    private function creaStabili()
    {
        $stabiliData = [
            [
                'denominazione' => 'Condominio Milano Centro',
                'indirizzo' => 'Via Brera, 15',
                'citta' => 'Milano',
                'cap' => '20121',
                'codice_fiscale' => '80012345678',
                'amministratore_nome' => 'Avv. Mario Rossi',
                'amministratore_email' => 'admin@netgescon.local',
                'telefono' => '+39 02 123456',
                'num_palazzine' => 1,
                'num_scale' => 4,
                'num_piani' => 6,
                'num_unita' => 24,
                'banca_principale' => 'Intesa Sanpaolo',
                'iban_principale' => 'IT60 X054 2811 1010 0000 0123 456',
                'saldo_iniziale_principale' => 15000.00,
                'data_saldo_iniziale' => '2025-01-01'
            ],
            [
                'denominazione' => 'Residenza Porta Nuova',
                'indirizzo' => 'Corso Garibaldi, 82',
                'citta' => 'Milano',
                'cap' => '20121',
                'codice_fiscale' => '80012345679',
                'amministratore_nome' => 'Dott.ssa Laura Bianchi',
                'amministratore_email' => 'admin@netgescon.local',
                'telefono' => '+39 02 234567',
                'num_palazzine' => 2,
                'num_scale' => 6,
                'num_piani' => 8,
                'num_unita' => 48,
                'banca_principale' => 'UniCredit',
                'iban_principale' => 'IT60 X020 0811 1010 0000 0234 567',
                'saldo_iniziale_principale' => 28000.00,
                'data_saldo_iniziale' => '2025-01-01'
            ],
            [
                'denominazione' => 'Villaggio Verde',
                'indirizzo' => 'Via dei Tigli, 33',
                'citta' => 'Milano',
                'cap' => '20137',
                'codice_fiscale' => '80012345680',
                'amministratore_nome' => 'Geom. Franco Verdi',
                'amministratore_email' => 'admin@netgescon.local',
                'telefono' => '+39 02 345678',
                'num_palazzine' => 5,
                'num_scale' => 2,
                'num_piani' => 3,
                'num_unita' => 30,
                'banca_principale' => 'Banco BPM',
                'iban_principale' => 'IT60 X056 9611 1010 0000 0345 678',
                'saldo_iniziale_principale' => 8500.00,
                'data_saldo_iniziale' => '2025-01-01'
            ]
        ];

        $stabili = [];
        foreach ($stabiliData as $data) {
            $stabili[] = Stabile::create($data);
        }

        return $stabili;
    }

    private function creaUnitaImmobiliari($stabili)
    {
        foreach ($stabili as $stabile) {
            $numUnita = $stabile->num_unita;
            $scale = $stabile->num_scale;
            $piani = $stabile->num_piani;
            
            $unitaPerScala = intval($numUnita / $scale);
            $unitaPerPiano = 2; // Media 2 unità per piano
            
            for ($scala = 1; $scala <= $scale; $scala++) {
                for ($piano = 1; $piano <= $piani; $piano++) {
                    for ($unita = 1; $unita <= $unitaPerPiano; $unita++) {
                        if (($scala - 1) * ($piani * $unitaPerPiano) + ($piano - 1) * $unitaPerPiano + $unita <= $numUnita) {
                            UnitaImmobiliare::create([
                                'stabile_id' => $stabile->id,
                                'interno' => $scala . '0' . $piano . '0' . $unita,
                                'scala' => 'Scala ' . chr(64 + $scala), // A, B, C...
                                'piano' => $piano,
                                'superficie' => rand(60, 120),
                                'vani' => rand(2, 5),
                                'categoria_catastale' => 'A/' . rand(2, 4),
                                'classe_energetica' => ['A', 'B', 'C', 'D'][rand(0, 3)],
                                'millesimi_proprieta' => rand(15, 35),
                                'millesimi_riscaldamento' => rand(12, 30),
                                'millesimi_ascensore' => rand(10, 25),
                                'note' => 'Unità di test - ' . $stabile->denominazione
                            ]);
                        }
                    }
                }
            }
        }
    }

    private function creaCondomini()
    {
        $condominiData = [
            ['nome' => 'Giuseppe', 'cognome' => 'Verdi', 'email' => 'g.verdi@email.com', 'telefono' => '+39 335 1234567'],
            ['nome' => 'Maria', 'cognome' => 'Rossi', 'email' => 'm.rossi@email.com', 'telefono' => '+39 338 2345678'],
            ['nome' => 'Francesco', 'cognome' => 'Bianchi', 'email' => 'f.bianchi@email.com', 'telefono' => '+39 340 3456789'],
            ['nome' => 'Anna', 'cognome' => 'Neri', 'email' => 'a.neri@email.com', 'telefono' => '+39 347 4567890'],
            ['nome' => 'Luigi', 'cognome' => 'Ferrari', 'email' => 'l.ferrari@email.com', 'telefono' => '+39 349 5678901'],
            ['nome' => 'Giulia', 'cognome' => 'Romano', 'email' => 'g.romano@email.com', 'telefono' => '+39 351 6789012'],
            ['nome' => 'Marco', 'cognome' => 'Gallo', 'email' => 'm.gallo@email.com', 'telefono' => '+39 333 7890123'],
            ['nome' => 'Elena', 'cognome' => 'Costa', 'email' => 'e.costa@email.com', 'telefono' => '+39 345 8901234'],
            ['nome' => 'Roberto', 'cognome' => 'Ricci', 'email' => 'r.ricci@email.com', 'telefono' => '+39 366 9012345'],
            ['nome' => 'Francesca', 'cognome' => 'Lombardi', 'email' => 'f.lombardi@email.com', 'telefono' => '+39 392 0123456']
        ];

        foreach ($condominiData as $data) {
            // Nota: qui dovresti creare il model Condomino se esiste
            // Al momento lo skippiamo se la tabella non esiste
            try {
                DB::table('condomini')->insert(array_merge($data, [
                    'created_at' => now(),
                    'updated_at' => now()
                ]));
            } catch (\Exception $e) {
                $this->command->warn('Tabella condomini non trovata, skip creazione condomini');
                break;
            }
        }
    }

    private function creaTickets()
    {
        $ticketsData = [
            [
                'titolo' => 'Problema ascensore Piano 3',
                'descrizione' => 'L\'ascensore si blocca al terzo piano da questa mattina',
                'priorita' => 'alta',
                'stato' => 'aperto',
                'categoria' => 'manutenzione'
            ],
            [
                'titolo' => 'Richiesta pulizia scale',
                'descrizione' => 'Le scale necessitano di una pulizia straordinaria',
                'priorita' => 'media',
                'stato' => 'in_lavorazione',
                'categoria' => 'pulizie'
            ],
            [
                'titolo' => 'Sostituzione lampadina cortile',
                'descrizione' => 'La lampadina del cortile interno è bruciata',
                'priorita' => 'bassa',
                'stato' => 'aperto',
                'categoria' => 'elettrico'
            ],
            [
                'titolo' => 'Perdita acqua garage',
                'descrizione' => 'Segnalata perdita d\'acqua nel garage al piano -1',
                'priorita' => 'alta',
                'stato' => 'aperto',
                'categoria' => 'idraulico'
            ],
            [
                'titolo' => 'Verifica riscaldamento',
                'descrizione' => 'Alcuni appartamenti lamentano scarso riscaldamento',
                'priorita' => 'media',
                'stato' => 'chiuso',
                'categoria' => 'riscaldamento'
            ]
        ];

        foreach ($ticketsData as $data) {
            try {
                DB::table('tickets')->insert(array_merge($data, [
                    'created_at' => now(),
                    'updated_at' => now()
                ]));
            } catch (\Exception $e) {
                $this->command->warn('Tabella tickets non trovata, skip creazione tickets');
                break;
            }
        }
    }
}
