"""proposals.py - AI navrhuje zmeny ke schvaleni."""
import json
import uuid
from datetime import datetime
from pathlib import Path

PROPOSALS_DIR = Path("/home/oem/CyberBrain26-lab/.cb26-data/proposals")
PROPOSALS_DIR.mkdir(parents=True, exist_ok=True)


def save_proposal(title, description, code_changes="", files_affected=None):
    pid = f"prop-{datetime.now().strftime('%Y%m%d-%H%M%S')}-{uuid.uuid4().hex[:6]}"
    data = {"id": pid, "title": title, "description": description,
            "code_changes": code_changes, "files_affected": files_affected or [],
            "status": "pending", "created_at": datetime.now().isoformat()}
    (PROPOSALS_DIR / f"{pid}.json").write_text(
        json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    return {"status": "success", "proposal_id": pid, "title": title}


def list_proposals(status=None):
    out = []
    for f in sorted(PROPOSALS_DIR.glob("prop-*.json"), reverse=True)[:50]:
        try:
            d = json.loads(f.read_text(encoding="utf-8"))
            if status and d.get("status") != status:
                continue
            out.append(d)
        except Exception:
            continue
    return out


def read_proposal(pid):
    f = PROPOSALS_DIR / f"{pid}.json"
    if not f.is_file():
        return None
    try:
        return json.loads(f.read_text(encoding="utf-8"))
    except Exception:
        return None


def update_status(pid, status):
    f = PROPOSALS_DIR / f"{pid}.json"
    if not f.is_file():
        return False
    d = json.loads(f.read_text(encoding="utf-8"))
    d["status"] = status
    d["updated_at"] = datetime.now().isoformat()
    f.write_text(json.dumps(d, ensure_ascii=False, indent=2), encoding="utf-8")
    return True


SAVE_PROPOSAL_TOOL = {"type": "function", "function": {
    "name": "save_proposal",
    "description": ("Ulozi navrh zmeny/opravy ke schvaleni. Pouzij, kdyz "
                    "chces navrhnout upravu kodu nebo systemu. NIKDY "
                    "neupravuj soubory primo - vzdy jen navrhni."),
    "parameters": {"type": "object", "properties": {
        "title": {"type": "string"},
        "description": {"type": "string"},
        "code_changes": {"type": "string",
                         "description": "Konkretni zmeny kodu (diff nebo cely obsah)"},
        "files_affected": {"type": "array", "items": {"type": "string"}}},
        "required": ["title", "description"], "additionalProperties": False}}}
