"""
Interfaccia a riga di comando (CLI) per DataProfiler.

Permette di eseguire il profiling di un dataset direttamente
da terminale con il comando `dataprofiler`.

Uso::

    dataprofiler dati.csv
    dataprofiler dati.csv -o report.md -f md
    dataprofiler vendite.xlsx -o report.html -f html
    dataprofiler prodotti.json -f json -o report.json
"""

import argparse
import sys
import os

from dataprofiler.profiler import Profiler
from dataprofiler.exporters import ExporterFactory
from dataprofiler import __version__


def main() -> None:
    """Entry point del comando CLI `dataprofiler`."""
    parser = argparse.ArgumentParser(
        prog="dataprofiler",
        description="📊 DataProfiler — Profiling automatico di dataset",
        epilog="Esempio: dataprofiler dati.csv -o report.md -f md",
    )
    parser.add_argument(
        "file",
        help="File da analizzare (CSV, Excel o JSON)",
    )
    parser.add_argument(
        "-o", "--output",
        help="Percorso del file di output (default: stdout)",
        default=None,
    )
    parser.add_argument(
        "-f", "--format",
        help=f"Formato di output: {', '.join(ExporterFactory.supported_formats())} (default: md)",
        default="md",
    )
    parser.add_argument(
        "-d", "--delimiter",
        help="Delimitatore per file CSV (default: ,)",
        default=",",
    )
    parser.add_argument(
        "-e", "--encoding",
        help="Codifica del file (default: utf-8)",
        default="utf-8",
    )
    parser.add_argument(
        "-v", "--version",
        action="version",
        version=f"DataProfiler {__version__}",
    )

    args = parser.parse_args()

    # Verifica che il file esista
    if not os.path.exists(args.file):
        print(f"❌ Errore: file '{args.file}' non trovato.", file=sys.stderr)
        sys.exit(1)

    try:
        # Crea il profiler con opzioni reader
        reader_kwargs = {}
        if args.delimiter != ",":
            reader_kwargs["delimiter"] = args.delimiter
        if args.encoding != "utf-8":
            reader_kwargs["encoding"] = args.encoding

        profiler = Profiler(args.file, **reader_kwargs)

        if args.output:
            # Profiling con export su file
            print(f"📊 Analisi di '{args.file}' in corso...")
            report = profiler.profile()
            profiler.export(report, args.output, fmt=args.format)
            print(f"✅ Report salvato in '{args.output}'")

            # Stampa anche un riepilogo breve
            print(f"   {report.row_count:,} righe × {report.column_count} colonne")
            print(f"   Completezza: {report.overall_completeness:.1f}%")
            if report.warnings:
                print(f"   ⚠️  {len(report.warnings)} avvisi trovati")
        else:
            # Solo riepilogo a terminale
            print(profiler.quick_summary())

    except Exception as e:
        print(f"❌ Errore: {e}", file=sys.stderr)
        sys.exit(1)


if __name__ == "__main__":
    main()
