# apps/abn_lookup_app/cli/abn_lookup_cli.py
import argparse
from ..core import lookup_abn_basic, lookup_abn_full


def main() -> None:
    parser = argparse.ArgumentParser(
        description="Consulta de ABN en el registro oficial (consola)."
    )
    parser.add_argument("abn", help="ABN a consultar (solo números, sin espacios)")
    parser.add_argument(
        "--full",
        action="store_true",
        help="Mostrar información detallada (modo completo).",
    )
    args = parser.parse_args()

    abn = args.abn.replace(" ", "").strip()

    if args.full:
        _run_full(abn)
    else:
        _run_basic(abn)


def _run_basic(abn: str) -> None:
    result = lookup_abn_basic(abn)

    print("============================================================")
    print(f"ABN: {result['tax_id']}")

    if not result["abn_exists"]:
        print("No se encontró el ABN en el registro oficial.")
        print("============================================================")
        return

    print(f"Nombre principal: {result['entity_name'] or 'N/D'}")
    print()
    print(f"Estado ABN: {'Active' if result['is_active'] else 'Inactive'}")
    print()
    if result["gst_registered"]:
        print("GST: Registrado para GST")
    else:
        print("GST: No registrado o sin información de registro disponible")
    print("============================================================")


def _run_full(abn: str) -> None:
    result = lookup_abn_full(abn)

    print("============================================================")
    print(f"ABN: {result['abn']}")

    if not result["abn_exists"]:
        print("No se encontró el ABN en el registro oficial.")
        print("============================================================")
        return

    print(f"Nombre principal: {result['entity_name'] or 'N/D'}")
    print()
    print(f"Tipo de entidad: {result.get('entity_type') or 'N/D'}")

    status = result.get("status") or "N/D"
    status_from = result.get("status_from")
    if status_from:
        print(f"Estado ABN: {status} (desde {status_from})")
    else:
        print(f"Estado ABN: {status}")

    last_updated = result.get("last_updated")
    if last_updated:
        print(f"Última actualización en el registro: {last_updated}")

    print()
    print("Dirección física principal:")
    physical = result.get("physical_address") or ""
    if physical:
        print(f"  {physical}")
    else:
        print("  N/D")

    print()
    print("Dirección postal:")
    postal = result.get("postal_address") or ""
    if postal:
        print(f"  {postal}")
    else:
        print("  N/D")

    print()
    if result.get("gst_registered"):
        gst_from = result.get("gst_from")
        if gst_from:
            print(f"GST: Registrado para GST (desde {gst_from})")
        else:
            print("GST: Registrado para GST")
    else:
        print("GST: No registrado o sin información de registro disponible")

    print("============================================================")


if __name__ == "__main__":
    main()
