<?php

namespace App\Console\Commands;

use App\Models\Stabile;
use App\Models\Palazzina;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

class GeneraPalazzineDemo extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'netgescon:demo-palazzine {--stabile_id=1 : ID dello stabile}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Genera dati demo per palazzine e unità immobiliari';

    /**
     * Execute the console command.
     */
    public function handle()
    {
        $stabileId = $this->option('stabile_id');

        // Verifica che lo stabile esista
        $stabile = Stabile::find($stabileId);
        if (!$stabile) {
            $this->error("Stabile con ID {$stabileId} non trovato!");
            return 1;
        }

        $this->info("🏢 Generazione palazzine demo per stabile: {$stabile->denominazione}");

        DB::beginTransaction();

        try {
            // Elimina eventuali palazzine esistenti per questo stabile
            $this->info("🗑️  Rimozione palazzine esistenti...");
            Palazzina::where('stabile_id', $stabileId)->delete();

            $palazzineCreate = [];

            // Genera 3 palazzine demo
            $configPalazzine = [
                [
                    'codice' => 'A',
                    'denominazione' => 'Palazzina A - Principale',
                    'scale' => 2,
                    'piani_fuori_terra' => 4,
                    'piani_interrati' => 1,
                    'appartamenti_per_piano' => 2,
                    'anno_costruzione' => 1985,
                    'ha_ascensore' => true,
                    'numero_ascensori' => 2,
                    'ha_videocitofono' => true,
                    'accessibile_disabili' => true,
                    'ha_giardino_comune' => true,
                    'mq_giardino_comune' => 150.50,
                ],
                [
                    'codice' => 'B',
                    'denominazione' => 'Palazzina B - Residenziale',
                    'scale' => 1,
                    'piani_fuori_terra' => 3,
                    'piani_interrati' => 0,
                    'appartamenti_per_piano' => 3,
                    'anno_costruzione' => 1992,
                    'ha_ascensore' => true,
                    'numero_ascensori' => 1,
                    'ha_videocitofono' => true,
                    'accessibile_disabili' => false,
                    'ha_terrazza_comune' => true,
                    'mq_terrazza_comune' => 75.25,
                ],
                [
                    'codice' => 'C',
                    'denominazione' => 'Palazzina C - Commerciale/Residenziale',
                    'scale' => 1,
                    'piani_fuori_terra' => 2,
                    'piani_interrati' => 0,
                    'appartamenti_per_piano' => 4,
                    'anno_costruzione' => 2005,
                    'ha_ascensore' => false,
                    'ha_videocitofono' => true,
                    'accessibile_disabili' => true,
                    'posti_auto_coperti' => 8,
                    'ha_locale_caldaia' => true,
                    'ha_locale_contatori' => true,
                ]
            ];

            foreach ($configPalazzine as $config) {
                $this->info("🏗️  Creazione Palazzina {$config['codice']}...");

                $palazzina = Palazzina::create([
                    'stabile_id' => $stabileId,
                    'codice_palazzina' => $config['codice'],
                    'denominazione' => $config['denominazione'],
                    'descrizione' => "Palazzina {$config['codice']} - Generata automaticamente per demo",
                    'numero_scale' => $config['scale'],
                    'numero_piani_fuori_terra' => $config['piani_fuori_terra'],
                    'numero_piani_interrati' => $config['piani_interrati'],
                    'ha_piano_terra' => true,
                    'appartamenti_per_piano' => $config['appartamenti_per_piano'],
                    'superficie_totale' => rand(500, 1500),
                    'anno_costruzione' => $config['anno_costruzione'],
                    'stato_conservazione' => ['ottimo', 'buono', 'discreto'][array_rand(['ottimo', 'buono', 'discreto'])],
                    'tipo_riscaldamento' => 'centralizzato',
                    'ha_ascensore' => $config['ha_ascensore'] ?? false,
                    'numero_ascensori' => $config['numero_ascensori'] ?? 0,
                    'ha_videocitofono' => $config['ha_videocitofono'] ?? false,
                    'ha_impianto_allarme' => rand(0, 1),
                    'accessibile_disabili' => $config['accessibile_disabili'] ?? false,
                    'posti_auto_coperti' => $config['posti_auto_coperti'] ?? rand(0, 5),
                    'posti_auto_scoperti' => rand(0, 10),
                    'ha_giardino_comune' => $config['ha_giardino_comune'] ?? false,
                    'mq_giardino_comune' => $config['mq_giardino_comune'] ?? null,
                    'ha_terrazza_comune' => $config['ha_terrazza_comune'] ?? false,
                    'mq_terrazza_comune' => $config['mq_terrazza_comune'] ?? null,
                    'ha_locale_caldaia' => $config['ha_locale_caldaia'] ?? false,
                    'ha_locale_contatori' => $config['ha_locale_contatori'] ?? true,
                    'ha_locale_bici' => rand(0, 1),
                    'ha_lavanderia' => rand(0, 1),
                    'note' => "Palazzina demo creata il " . now()->format('d/m/Y H:i'),
                    'attiva' => true,
                ]);

                $palazzineCreate[] = $palazzina;

                $this->info("   ✅ Palazzina {$config['codice']} creata (ID: {$palazzina->id})");
                $this->info("   📊 Unità teoriche: {$palazzina->numero_teorico_unita}");
            }

            // Opzione per generare anche le unità immobiliari
            if ($this->confirm('Vuoi generare automaticamente anche le unità immobiliari?', true)) {
                $this->info("🏠 Generazione unità immobiliari...");

                $totaleUnita = 0;
                foreach ($palazzineCreate as $palazzina) {
                    $this->info("   🔨 Generazione unità per Palazzina {$palazzina->codice_palazzina}...");
                    $numeroUnita = $palazzina->eseguiGenerazioneUnita();
                    $totaleUnita += $numeroUnita;
                    $this->info("   ✅ Generate {$numeroUnita} unità per Palazzina {$palazzina->codice_palazzina}");
                }

                $this->info("🎉 Totale unità generate: {$totaleUnita}");
            }

            DB::commit();

            $this->info("✨ Generazione completata con successo!");
            $this->table(
                ['Palazzina', 'Scale', 'Piani', 'App/Piano', 'Unità Teoriche', 'Anno'],
                collect($palazzineCreate)->map(function ($p) {
                    return [
                        $p->codice_palazzina,
                        $p->numero_scale,
                        $p->numero_totale_piani,
                        $p->appartamenti_per_piano,
                        $p->numero_teorico_unita,
                        $p->anno_costruzione,
                    ];
                })->toArray()
            );

            return 0;
        } catch (\Exception $e) {
            DB::rollback();
            $this->error("❌ Errore durante la generazione: " . $e->getMessage());
            $this->error("Stack trace: " . $e->getTraceAsString());
            return 1;
        }
    }
}
