#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import urllib.request, urllib.parse, json, os
from datetime import date

PB = "http://localhost:8102"
EMAIL = os.environ.get("PB_ADMIN_EMAIL")
PASS = os.environ.get("PB_ADMIN_PASSWORD")

def req(method, url, token=None, body=None):
    data = json.dumps(body).encode() if body is not None else None
    r = urllib.request.Request(url, data=data, method=method)
    r.add_header("Content-Type", "application/json")
    if token:
        r.add_header("Authorization", token)
    try:
        with urllib.request.urlopen(r) as resp:
            return resp.status, json.loads(resp.read().decode() or "{}")
    except urllib.error.HTTPError as e:
        try:
            return e.code, json.loads(e.read().decode() or "{}")
        except Exception:
            return e.code, {}

_, data = req("POST", f"{PB}/api/collections/_superusers/auth-with-password",
              body={"identity": EMAIL, "password": PASS})
token = data["token"]

items, page = [], 1
while True:
    q = urllib.parse.urlencode({
        "filter": 'estado_pedido != "entregado" && estado_pedido != "cancelado"',
        "perPage": 200, "page": page,
    })
    _, d = req("GET", f"{PB}/api/collections/pedidos/records?{q}", token=token)
    items += d.get("items", [])
    if page >= d.get("totalPages", 1):
        break
    page += 1

today = date.today().isoformat()
def deadline(p):
    return (p.get("fecha_entrega_hasta") or p.get("fecha_entrega_estimada") or "")[:10]

overdue = [p for p in items if deadline(p) and deadline(p) < today]
duetoday = [p for p in items if deadline(p) == today]
sin_fecha = [p for p in items if not deadline(p)]
print(f"hoy={today}  activos(no entregado/cancelado)={len(items)}  VENCIDOS={len(overdue)}  vencen_hoy={len(duetoday)}  sin_fecha={len(sin_fecha)}")
print("--- vencidos (mas viejos primero) ---")
for p in sorted(overdue, key=lambda x: deadline(x))[:25]:
    print(f"  {deadline(p)}  {p.get('codigo') or ('#'+str(p.get('numero'))) or p['id']}  {p.get('estado_pedido')}")
