<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\Stabile;
use App\Models\TabellaMillesimale;
use App\Models\DettaglioMillesimale;
use App\Models\UnitaImmobiliare;
use App\Models\RubricaUniversale;
use App\Models\DatiBancari;

class CreateSampleData extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'netgescon:sample-data';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Crea dati di esempio per testare le nuove interfacce NetGescon';

    /**
     * Execute the console command.
     */
    public function handle()
    {
        $this->info('🚀 Creazione dati di esempio NetGescon...');

        // 1. Verifica/Crea Stabile con tutti i dati completi
        $stabileCount = Stabile::count();
        $stabile = null;

        if ($stabileCount == 0) {
            $this->info('📋 Creazione primo stabile di esempio...');
            $stabile = Stabile::create([
                'codice_stabile' => 'ROM001',
                'denominazione' => 'Condominio Via Roma 123',
                'indirizzo' => 'Via Roma 123',
                'citta' => 'Roma',
                'cap' => '00100',
                'provincia' => 'RM',
                'amministratore_id' => 2, // admin@example.com
                'stato' => 'attivo'
            ]);
            $this->info("✅ Stabile creato: {$stabile->denominazione}");
        } else {
            // Usa l'ultimo stabile per creare i dati associati
            $stabile = Stabile::latest()->first();
            $this->info("📋 Uso stabile esistente: {$stabile->denominazione}");
        }

        // 2. Crea Tabella Millesimale se non esiste
        $tabella = $stabile->tabelleMillesimali()->first();
        if (!$tabella) {
            $this->info('📊 Creazione tabella millesimale...');
            $tabella = $stabile->tabelleMillesimali()->create([
                'nome_tabella' => 'Spese Generali',
                'codice_tabella' => 'TAB.A',
                'denominazione' => 'Spese Generali',
                'tipo_tabella' => 'proprieta',
                'stato_tabella' => 'attiva',
                'totale_millesimi' => 0,
                'creato_da' => 1
            ]);
            $this->info("✅ Tabella creata: {$tabella->codice_tabella}");
        } else {
            $this->info("📊 Tabella esistente: {$tabella->codice_tabella}");
        }

        // 3. Crea dettagli millesimali se non esistono
        $dettagliCount = $tabella->dettagli()->count();
        if ($dettagliCount == 0) {
            $this->info('🏠 Creazione dettagli millesimali...');

            // Prima verifica se ci sono unità immobiliari
            $unitaImmobiliari = $stabile->unitaImmobiliari()->take(5)->get();

            if ($unitaImmobiliari->count() == 0) {
                $this->info('⚠️  Nessuna unità immobiliare trovata nello stabile.');
                $this->info('📋 Creazione unità immobiliari di esempio...');

                // Crea alcune unità immobiliari di esempio
                $unitaData = [
                    ['interno' => '1', 'scala' => 'A', 'piano' => '0', 'superficie' => 85.00],
                    ['interno' => '2', 'scala' => 'A', 'piano' => '1', 'superficie' => 92.00],
                    ['interno' => '3', 'scala' => 'A', 'piano' => '2', 'superficie' => 95.00],
                    ['interno' => '4', 'scala' => 'A', 'piano' => '3', 'superficie' => 120.00],
                    ['interno' => '5', 'scala' => 'B', 'piano' => '0', 'superficie' => 80.00]
                ];

                foreach ($unitaData as $unita) {
                    $unitaImmobiliari[] = $stabile->unitaImmobiliari()->create([
                        'interno' => $unita['interno'],
                        'scala' => $unita['scala'],
                        'piano' => $unita['piano'],
                        'superficie' => $unita['superficie'],
                        'stato' => 'attiva',
                        'created_by' => 1
                    ]);
                }

                $this->info("✅ Create " . count($unitaData) . " unità immobiliari");
            }

            // Ora crea i dettagli millesimali
            $millesimi = [89.5000, 92.3000, 95.1000, 120.5000, 80.0000];
            $totaleMillesimi = 0;

            foreach ($unitaImmobiliari as $index => $unita) {
                $millesimiValue = $millesimi[$index] ?? (80.0 + ($index * 5.0));

                DettaglioMillesimale::create([
                    'tabella_id' => $tabella->id,
                    'unita_immobiliare_id' => $unita->id,
                    'millesimi' => $millesimiValue,
                    'creato_da' => 1
                ]);

                $totaleMillesimi += $millesimiValue;
            }

            // Aggiorna il totale della tabella
            $tabella->update(['totale_millesimi' => $totaleMillesimi]);

            $this->info("✅ Creati " . $unitaImmobiliari->count() . " dettagli millesimali");
            $this->info("📊 Totale millesimi: {$totaleMillesimi}");
        } else {
            $this->info("🏠 Dettagli esistenti: {$dettagliCount}");
        }

        // 4. Crea contatti rubrica universale
        $banche = RubricaUniversale::categoria('banca')->count();
        if ($banche == 0) {
            $this->info('🏦 Creazione contatti banche...');

            $bancheData = [
                [
                    'ragione_sociale' => 'Banca Intesa SanPaolo S.p.A.',
                    'tipo_contatto' => 'persona_giuridica',
                    'categoria' => 'banca',
                    'partita_iva' => '06854851004',
                    'indirizzo' => 'Piazza San Carlo 156',
                    'citta' => 'Torino',
                    'cap' => '10121',
                    'provincia' => 'TO',
                    'telefono_ufficio' => '+39 011 555 1111',
                    'email' => 'condomini@intesasanpaolo.it',
                    'stato' => 'attivo'
                ],
                [
                    'ragione_sociale' => 'UniCredit S.p.A.',
                    'tipo_contatto' => 'persona_giuridica',
                    'categoria' => 'banca',
                    'partita_iva' => '02008110222',
                    'indirizzo' => 'Piazza Gae Aulenti 3',
                    'citta' => 'Milano',
                    'cap' => '20154',
                    'provincia' => 'MI',
                    'telefono_ufficio' => '+39 02 888 2222',
                    'email' => 'condomini@unicredit.it',
                    'stato' => 'attivo'
                ]
            ];

            foreach ($bancheData as $banca) {
                RubricaUniversale::create($banca + ['creato_da' => 1]);
            }

            $this->info("✅ Creati " . count($bancheData) . " contatti banca");
        } else {
            $this->info("🏦 Banche esistenti: {$banche}");
        }

        // 5. Crea dati bancari se non esistono
        $contiBancari = $stabile->datiBancari()->count();
        if ($contiBancari == 0) {
            $this->info('💳 Creazione dati bancari...');

            $banca = RubricaUniversale::categoria('banca')->first();
            if ($banca) {
                DatiBancari::create([
                    'stabile_id' => $stabile->id,
                    'contatto_id' => $banca->id,
                    'tipo_conto' => 'corrente',
                    'denominazione_banca' => $banca->ragione_sociale,
                    'iban' => 'IT60 X054 2811 1010 0000 0123 456',
                    'intestazione_conto' => 'Condominio ' . $stabile->denominazione,
                    'data_saldo_iniziale' => '2025-01-01',
                    'saldo_iniziale' => 15000.00,
                    'valuta' => 'EUR',
                    'stato_conto' => 'attivo',
                    'creato_da' => 1
                ]);
                $this->info("✅ Conto bancario creato presso {$banca->ragione_sociale}");
            }
        } else {
            $this->info("💳 Conti bancari esistenti: {$contiBancari}");
        }

        $this->info('');
        $this->info('🎉 Dati di esempio creati con successo!');
        $this->info('📋 Ora puoi testare le nuove interfacce:');
        $this->info('   • Tabelle Millesimali (vista Excel)');
        $this->info('   • Dati Bancari (con rubrica universale)');
        $this->info('   • Documenti Collegati (con protocolli)');

        return 0;
    }
}
