#!/usr/bin/env python3
"""Seed the unknown user's wardrobe from preset garment images.

Usage (run from repo root with venv activated):

    python scripts/seed_wardrobe.py --mode reset
    python scripts/seed_wardrobe.py --mode add --resource-dir /some/other/dir

Default resource dirs: see seed_service.DEFAULT_RESOURCE_DIRS.
"""

from __future__ import annotations

import argparse
import asyncio
import json
import logging
import sys
from pathlib import Path

REPO_ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(REPO_ROOT))

from app.dependencies import async_session_factory, get_garment_service  # noqa: E402
from app.services.seed_service import (  # noqa: E402
    DEFAULT_RESOURCE_DIRS,
    seed_wardrobe,
)


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument(
        "--mode",
        choices=["reset", "add"],
        default="add",
        help="reset: wipe DB+storage then seed. add (default): keep existing.",
    )
    parser.add_argument(
        "--resource-dir",
        action="append",
        dest="resource_dirs",
        type=Path,
        help="Override resource directory (repeatable). Defaults to men_garments + women_garments.",
    )
    return parser.parse_args()


async def main() -> int:
    args = parse_args()
    dirs = args.resource_dirs if args.resource_dirs else DEFAULT_RESOURCE_DIRS

    print(f"Mode: {args.mode}")
    print(f"Resource dirs: {[str(d) for d in dirs]}")
    print("-" * 60)

    gs = get_garment_service()
    async with async_session_factory() as db:
        summary = await seed_wardrobe(
            db, gs, mode=args.mode, resource_dirs=dirs, progress_cb=print,
        )

    print("-" * 60)
    print(json.dumps(summary.model_dump(), indent=2, default=str))
    return 0 if not summary.errors else 1


if __name__ == "__main__":
    logging.basicConfig(
        level=logging.INFO,
        format="%(asctime)s %(levelname)s %(name)s: %(message)s",
    )
    sys.exit(asyncio.run(main()))
