<?php

namespace App\Console\Commands;

use App\Services\ForexCsvImportService;
use Illuminate\Console\Command;

class ImportForexCsvCommand extends Command
{
    protected $signature = 'import:forex-csv
                            {--path= : Ruta al CSV (por defecto: webjabesfx(FOREX).csv en la raíz del proyecto)}
                            {--dry-run : Solo simula y muestra conteos, sin escribir en base de datos}';

    protected $description = 'Encola planes del CSV FOREX para revisión en admin/importacion-forex; la creación de usuarios e inversiones ocurre solo al aprobar por correo.';

    public function handle(ForexCsvImportService $importer): int
    {
        $path = (string) ($this->option('path') ?? '');
        if ($path === '') {
            $path = base_path('webjabesfx(FOREX).csv');
        }

        $dryRun = (bool) $this->option('dry-run');

        try {
            $stats = $importer->importFromPath($path, $dryRun);
        } catch (\Throwable $e) {
            $this->error($e->getMessage());

            return self::FAILURE;
        }

        $this->info('Archivo: '.$path);
        if ($dryRun) {
            $this->warn('Modo simulación (--dry-run): no se escribió en la base de datos.');
        }

        $this->table(
            ['Métrica', 'Cantidad'],
            [
                ['Bloques con nombre (anclas)', $stats['anchors_seen']],
                ['Filas de continuación (nombre vacío, con contexto)', $stats['continuation_rows']],
                ['Filas huérfanas omitidas (sin nombre y sin persona previa)', $stats['orphan_skipped']],
                ['Planes encolados para revisión', $stats['plans_queued_for_review']],
                ['Correos que implicarían usuario nuevo (solo en --dry-run)', $stats['would_create_users']],
                ['Planes omitidos (monto/fechas/duración inválidos)', $stats['plans_parse_skipped']],
                ['Planes omitidos (duplicado / ya en cola o importado)', $stats['plans_duplicate_skipped']],
            ],
        );

        if (! $dryRun && $stats['plans_queued_for_review'] > 0) {
            $this->line('Revisa y aprueba por usuario en /admin/importacion-forex.');
        }

        if ($dryRun && $stats['would_create_users'] > 0) {
            $this->comment('En ejecución real, esos correos obtendrían cuenta al aprobar el grupo (contraseña aleatoria; recuperación por correo).');
        }

        return self::SUCCESS;
    }
}
