"""
evidence_locker.py — Primary Evidence Storage
STATUS: DOCUMENTED_ONLY

Stores research evidence items. In documented_only mode, uses in-memory
storage only (no DB writes). Activation requires SQLite schema migration.
"""

MODULE_STATUS = "documented_only"

import uuid
import datetime

# In-memory store for documented_only mode
_EVIDENCE_STORE: list = []

EVIDENCE_SCHEMA = {
    "item_id":      str,   # UUID
    "source_id":    str,   # From source_registry
    "source_name":  str,
    "url":          str,   # Required
    "title":        str,
    "excerpt":      str,   # < 200 chars
    "date":         str,   # ISO8601
    "retrieved_at": str,   # ISO8601
    "credibility":  float, # 0.0–1.0
    "relevance":    float, # 0.0–1.0
    "quality_score": float,
    "is_public":    bool,  # Must be True
    "contains_pii": bool,  # Must be False
    "tags":         list,
    "packet_id":    str,   # Associated proof packet (if any)
}


def _now_iso() -> str:
    return datetime.datetime.utcnow().isoformat() + "Z"


def store_evidence(source_id: str, source_name: str, url: str, title: str,
                   excerpt: str, date: str, credibility: float = 0.0,
                   relevance: float = 0.0, tags: list = None) -> dict:
    """Store a single evidence item. Returns the stored entry."""
    if not url:
        return {"error": "url is required for evidence items"}
    item = {
        "item_id":      str(uuid.uuid4()),
        "source_id":    source_id,
        "source_name":  source_name,
        "url":          url,
        "title":        title,
        "excerpt":      excerpt[:200] if excerpt else "",
        "date":         date,
        "retrieved_at": _now_iso(),
        "credibility":  credibility,
        "relevance":    relevance,
        "quality_score": (credibility + relevance) / 2.0,
        "is_public":    True,
        "contains_pii": False,
        "tags":         tags or [],
        "packet_id":    None,
        "module_status": MODULE_STATUS,
    }
    if MODULE_STATUS != "documented_only":
        _EVIDENCE_STORE.append(item)
    return item


def get_all(limit: int = 100) -> list:
    if MODULE_STATUS == "documented_only":
        return []
    return _EVIDENCE_STORE[-limit:]


def get_by_id(item_id: str) -> dict:
    for item in _EVIDENCE_STORE:
        if item["item_id"] == item_id:
            return item
    return {}


def get_summary() -> dict:
    return {
        "module":  "evidence_locker",
        "status":  MODULE_STATUS,
        "count":   len(_EVIDENCE_STORE),
    }


def module_status() -> dict:
    return get_summary()
