#!/usr/bin/env python3
"""Crea la colección 'facturas' en PocketBase :8102 para Fibromuebles."""

import json, urllib.request, urllib.error

PB_URL = "http://localhost:8102"
EMAIL = "edelmar.edd@gmail.com"
PASSWORD = "564712564712"


def pb_post(path, data, token=None):
    body = json.dumps(data).encode()
    headers = {"Content-Type": "application/json"}
    if token:
        headers["Authorization"] = token
    req = urllib.request.Request(f"{PB_URL}{path}", body, headers)
    try:
        with urllib.request.urlopen(req) as r:
            return json.loads(r.read())
    except urllib.error.HTTPError as e:
        resp = json.loads(e.read())
        if e.code == 400 and "already exists" in str(resp):
            print(f"  (ya existe, omitiendo)")
            return resp
        raise


def pb_get(path, token=None):
    headers = {"Content-Type": "application/json"}
    if token:
        headers["Authorization"] = token
    req = urllib.request.Request(f"{PB_URL}{path}", headers=headers)
    with urllib.request.urlopen(req) as r:
        return json.loads(r.read())


# ── Auth superuser ──────────────────────────────────────────────────────────
auth = pb_post(
    "/api/collections/_superusers/auth-with-password",
    {"identity": EMAIL, "password": PASSWORD},
)
token = auth["token"]
print("✓ Autenticado como superuser")

# ── Verificar si ya existe ──────────────────────────────────────────────────
try:
    existing = pb_get("/api/collections/facturas", token)
    print(f"✓ Colección 'facturas' ya existe (id: {existing['id']})")
    print("  Nada que hacer.")
    exit(0)
except urllib.error.HTTPError as e:
    if e.code != 404:
        raise

# ── Obtener id de colección 'users' ────────────────────────────────────────
users_col = pb_get("/api/collections/users", token)
users_col_id = users_col["id"]

pedidos_col = pb_get("/api/collections/pedidos", token)
pedidos_col_id = pedidos_col["id"]

# ── Crear colección 'facturas' ──────────────────────────────────────────────
col = {
    "name": "facturas",
    "type": "base",
    "fields": [
        # Relación al pedido (opcional — puede haber facturas sin pedido)
        {
            "name": "pedido",
            "type": "relation",
            "required": False,
            "collectionId": pedidos_col_id,
            "cascadeDelete": False,
            "minSelect": None,
            "maxSelect": 1,
        },
        # Datos del comprobante AFIP
        {"name": "punto_venta", "type": "number", "required": True},
        {"name": "tipo_cbte",   "type": "number", "required": True},   # 11 = Factura C
        {"name": "nro_cbte",    "type": "number", "required": True},
        {"name": "fecha",       "type": "text",   "required": True},   # YYYYMMDD
        {"name": "cae",         "type": "text",   "required": False},
        {"name": "cae_fch_vto", "type": "text",   "required": False},  # YYYYMMDD
        # Cliente (desnormalizado para no depender del pedido)
        {"name": "cliente_nombre", "type": "text",   "required": False},
        {"name": "doc_tipo",       "type": "number", "required": False},  # 99/96/80
        {"name": "doc_nro",        "type": "number", "required": False},
        # Montos
        {"name": "imp_total",   "type": "number", "required": True},
        {"name": "concepto",    "type": "number", "required": False},   # 1/2/3
        # Estado
        {
            "name": "resultado",
            "type": "select",
            "required": False,
            "values": ["A", "R", "pendiente"],
            "maxSelect": 1,
        },
        {"name": "observaciones", "type": "text", "required": False},
        # Auditoría
        {
            "name": "created_by",
            "type": "relation",
            "required": False,
            "collectionId": users_col_id,
            "cascadeDelete": False,
            "minSelect": None,
            "maxSelect": 1,
        },
    ],
    "listRule": "@request.auth.id != '' && @request.auth.role = 'admin'",
    "viewRule": "@request.auth.id != '' && @request.auth.role = 'admin'",
    "createRule": "@request.auth.id != '' && @request.auth.role = 'admin'",
    "updateRule": "@request.auth.id != '' && @request.auth.role = 'admin'",
    "deleteRule": "@request.auth.id != '' && @request.auth.role = 'admin'",
}

result = pb_post("/api/collections", col, token)
print(f"✓ Colección 'facturas' creada (id: {result.get('id', '?')})")
print("  Listo. Ahora podés emitir facturas desde la app.")
