#!/usr/bin/env python3
"""
L'Acqua Marina - Catalogo helper.
Consulta rapida ao catalog.json: lista, filtra por volume/pilar, mostra detalhes.

Uso:
  python catalog.py list
  python catalog.py list --vol I
  python catalog.py list --pilar Autoridade
  python catalog.py show p05
  python catalog.py suggest --pilar Autoridade --with-photo false
"""
import argparse
import json
from pathlib import Path

SKILL_DIR = Path(__file__).parent.parent
CATALOG = SKILL_DIR / "catalog.json"

def load():
    return json.loads(CATALOG.read_text(encoding="utf-8"))

def cmd_list(args):
    data = load()
    posts = data["posts"]
    if args.vol:
        posts = [p for p in posts if p["vol"] == args.vol]
    if args.pilar:
        posts = [p for p in posts if p["pilar"].lower() == args.pilar.lower()]
    for p in posts:
        photo = "[foto]" if p["needsPhoto"] else "      "
        print(f'{p["id"]} {photo} Vol {p["vol"]} - {p["pilar"]:12} - {p["fmt"]:18} - {p["name"]}')

def cmd_show(args):
    data = load()
    post = next((p for p in data["posts"] if p["id"] == args.id), None)
    if not post:
        print(f"Nao encontrado: {args.id}")
        return
    print(json.dumps(post, indent=2, ensure_ascii=False))

def cmd_suggest(args):
    """Sugere 3 referencias baseado em filtros."""
    data = load()
    posts = data["posts"]
    if args.pilar:
        posts = [p for p in posts if p["pilar"].lower() == args.pilar.lower()]
    if args.with_photo is not None:
        wants_photo = args.with_photo.lower() == "true"
        posts = [p for p in posts if p["needsPhoto"] == wants_photo]
    # Distribuir entre volumes quando possivel
    by_vol = {}
    for p in posts:
        by_vol.setdefault(p["vol"], []).append(p)
    suggestions = []
    for vol in ["I","II","III"]:
        if vol in by_vol and by_vol[vol]:
            suggestions.append(by_vol[vol][0])
    # Completar ate 3
    for p in posts:
        if len(suggestions) >= 3: break
        if p not in suggestions:
            suggestions.append(p)
    print("Sugestoes (escolha 1):\n")
    for i,p in enumerate(suggestions[:3], 1):
        print(f'{i}. {p["id"]} Vol {p["vol"]} - {p["name"]} ({p["pilar"]})')
        print(f'   {p["idea"]}\n')

def main():
    ap = argparse.ArgumentParser()
    sub = ap.add_subparsers(dest="cmd", required=True)

    p_list = sub.add_parser("list")
    p_list.add_argument("--vol")
    p_list.add_argument("--pilar")
    p_list.set_defaults(func=cmd_list)

    p_show = sub.add_parser("show")
    p_show.add_argument("id")
    p_show.set_defaults(func=cmd_show)

    p_sug = sub.add_parser("suggest")
    p_sug.add_argument("--pilar")
    p_sug.add_argument("--with-photo", choices=["true","false"])
    p_sug.set_defaults(func=cmd_suggest)

    args = ap.parse_args()
    args.func(args)

if __name__ == "__main__":
    main()
