"""
packet_schema.py — Standard Proof Packet Schema
STATUS: DOCUMENTED_ONLY

Defines the data structure for all AEGIS proof packets.
"""

MODULE_STATUS = "documented_only"

PACKET_VERSION = "1.0"

# ── Proof packet schema ───────────────────────────────────────────────────────
PROOF_PACKET_SCHEMA = {
    "packet_id":        str,      # UUID
    "version":          str,      # PACKET_VERSION
    "created_at":       str,      # ISO8601 timestamp
    "status":           str,      # "draft" | "ready_for_review" | "approved" | "rejected"
    "human_approved":   bool,     # Must be True before any action is taken
    "reviewer":         str,      # Who approved
    "reviewed_at":      str,      # ISO8601 timestamp

    # Research metadata
    "query":            str,      # The research query / task description
    "sources_used":     list,     # List of source names/URLs
    "search_terms":     list,     # Terms used in search

    # Evidence
    "evidence_items":   list,     # List of EvidenceItem dicts (see below)
    "evidence_count":   int,
    "quality_score":    float,    # Aggregate 0.0–1.0

    # Gate results
    "quality_gate_passed": bool,
    "no_go_filter_passed": bool,
    "safety_gate_passed":  bool,

    # Output
    "summary":          str,      # Human-readable summary
    "notes":            str,
}

EVIDENCE_ITEM_SCHEMA = {
    "item_id":          str,      # UUID
    "source":           str,      # Source name
    "url":              str,      # Source URL (required)
    "title":            str,
    "excerpt":          str,      # Short quote / summary (< 200 chars)
    "date":             str,      # Publication date ISO8601
    "retrieved_at":     str,      # Retrieval timestamp ISO8601
    "credibility":      float,    # 0.0–1.0
    "relevance":        float,    # 0.0–1.0
    "is_public":        bool,     # Must be True
    "contains_pii":     bool,     # Must be False
}


def get_schema() -> dict:
    return PROOF_PACKET_SCHEMA


def get_evidence_schema() -> dict:
    return EVIDENCE_ITEM_SCHEMA


def module_status() -> dict:
    return {
        "module":  "packet_schema",
        "status":  MODULE_STATUS,
        "version": PACKET_VERSION,
    }
