from __future__ import annotations

import argparse
import logging
from pathlib import Path

from src.config.images_config import load_images_config
from src.images.gbp_export import export_gbp
from src.images.website_webp import export_website_webp
from src.logging_setup import log_event

logger = logging.getLogger(__name__)


def register(sub: argparse._SubParsersAction) -> None:
    export = sub.add_parser("export", help="Generate website and GBP image exports.")
    export_sub = export.add_subparsers(dest="export_cmd", required=True)

    website = export_sub.add_parser("website", help="Generate website WebP exports.")
    website.add_argument("--inbox", required=True, help="Inbox folder path.")
    website.add_argument("--out", required=True, help="Output folder path.")
    website.add_argument("--dry-run", action="store_true", help="Do not write outputs.")
    website.set_defaults(_handler=_run_website)

    gbp = export_sub.add_parser("gbp", help="Generate GBP-ready JPG/PNG exports.")
    gbp.add_argument("--inbox", required=True, help="Inbox folder path.")
    gbp.add_argument("--out", required=True, help="Output folder path.")
    gbp.add_argument("--dry-run", action="store_true", help="Do not write outputs.")
    gbp.set_defaults(_handler=_run_gbp)


def _run_website(args: argparse.Namespace) -> int:
    log_event(logger, "command.start", command="export.website")
    cfg = load_images_config()
    summary = export_website_webp(
        inbox_dir=Path(args.inbox),
        out_dir=Path(args.out),
        target_kb=cfg.website_webp_target_kb,
        dry_run=bool(args.dry_run),
    )
    print(summary.to_human_summary())
    log_event(logger, "command.complete", command="export.website")
    return 0


def _run_gbp(args: argparse.Namespace) -> int:
    log_event(logger, "command.start", command="export.gbp")
    cfg = load_images_config()
    summary = export_gbp(
        inbox_dir=Path(args.inbox),
        out_dir=Path(args.out),
        min_size=cfg.gbp_min_size,
        dry_run=bool(args.dry_run),
    )
    print(summary.to_human_summary())
    log_event(logger, "command.complete", command="export.gbp")
    return 0
