#!/usr/bin/env python3
"""GET endpoint for Asset Inventory data + version polling.

Query params:
  version_only=1  → {"version": N}  (cheap polling)
  (default)       → {"version", "containers", "categories", "items", "photos",
                     "sites", "suggested_categories", "suggested_types"}

Photo rows carry metadata only (no bytes) — the image itself is streamed by
connex_photo_cgi.py?id=<photo_id>.
"""

import cgi
import json
import sys

sys.path.insert(0, '/opt/ngon/apps')
sys.path.insert(0, '/var/www/html/ngon/connex')
from managers.auth_manager import AuthManager
from connex_db import get_db, get_version, SUGGESTED_CATEGORIES, SUGGESTED_CONTAINER_TYPES, site_names


def main():
    form = cgi.FieldStorage()
    auth = AuthManager('connex')
    auth_required, should_exit, headers = auth.require_auth(form)

    print("Content-Type: application/json")
    if headers:
        print(headers)
    print("")

    if auth_required or should_exit:
        print(json.dumps({"error": "unauthorized"}))
        return

    try:
        conn = get_db()
        version = get_version(conn)

        if form.getvalue('version_only'):
            print(json.dumps({"version": version}))
            conn.close()
            return

        containers = [dict(r) for r in conn.execute(
            "SELECT id, name, site, type, position, created_by, created_at "
            "FROM containers ORDER BY position ASC, id ASC")]
        categories = [dict(r) for r in conn.execute(
            "SELECT id, container_id, name, position "
            "FROM container_categories ORDER BY container_id, position ASC, name")]
        items = [dict(r) for r in conn.execute(
            "SELECT id, container_id, category, description, quantity, position, "
            "created_by, created_at FROM items ORDER BY position ASC, id ASC")]
        photos = [dict(r) for r in conn.execute(
            "SELECT id, container_id, category, orig_name, caption, uploaded_by, uploaded_at "
            "FROM photos ORDER BY id ASC")]
        site_order = {r['site']: r['position'] for r in conn.execute(
            "SELECT site, position FROM site_order")}
        conn.close()

        print(json.dumps({
            "version": version,
            "containers": containers,
            "categories": categories,
            "items": items,
            "photos": photos,
            "sites": site_names(),
            "site_order": site_order,
            "suggested_categories": SUGGESTED_CATEGORIES,
            "suggested_types": SUGGESTED_CONTAINER_TYPES,
        }))
    except Exception as e:
        print(json.dumps({"error": str(e)}))


if __name__ == "__main__":
    main()
