#!/usr/bin/env python3
"""Create a product + character pair from CLI args."""

import argparse
import json
import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "backend"))

from app.core.database import Base, SessionLocal, engine  # noqa: E402
from app.models.character import Character  # noqa: E402
from app.models.product import Product  # noqa: E402


def main() -> None:
    parser = argparse.ArgumentParser(description="Create Bottle AI product")
    parser.add_argument("--product-id", required=True)
    parser.add_argument("--qr", required=True)
    parser.add_argument("--name", required=True)
    parser.add_argument("--brand", default="")
    parser.add_argument("--description", default="")
    parser.add_argument("--character-id", required=True)
    parser.add_argument("--character-name", required=True)
    parser.add_argument("--system-prompt", required=True)
    parser.add_argument("--voice-id", required=True)
    args = parser.parse_args()

    Base.metadata.create_all(bind=engine)
    db = SessionLocal()
    try:
        if not db.get(Character, args.character_id):
            db.add(
                Character(
                    id=args.character_id,
                    name=args.character_name,
                    description="",
                    system_prompt=args.system_prompt,
                    voice_provider="elevenlabs",
                    voice_id=args.voice_id,
                    animation={
                        "idle": f"{args.character_id}_idle",
                        "talking": f"{args.character_id}_talking",
                        "happy": f"{args.character_id}_happy",
                        "thinking": f"{args.character_id}_thinking",
                    },
                )
            )
        if not db.get(Product, args.product_id):
            db.add(
                Product(
                    id=args.product_id,
                    qr_code=args.qr,
                    name=args.name,
                    brand=args.brand,
                    description=args.description,
                    character_id=args.character_id,
                )
            )
        db.commit()
        print(json.dumps({"ok": True, "qr": args.qr, "product_id": args.product_id}))
    finally:
        db.close()


if __name__ == "__main__":
    main()
