#!/usr/bin/env python3
"""
Einmalige Migration: alte SQLite-Fakten (`memories`-Tabelle aus dem v1/v2-Memory)
→ Mem0. Läuft im ~/.mem0/venv. Idempotent über eine Marker-Datei.

Jeder Alt-Eintrag wird VERBATIM übernommen (infer=False), Kategorie/Source als
Metadaten. Beim aktuellen Box-Stand ist die DB leer → No-Op, aber für
Reproduzierbarkeit/künftige Migrationen vorhanden.

Aufruf:  ~/.mem0/venv/bin/python migrate.py [pfad/zur/mc2-memory.db]
"""

import os
import sqlite3
import sys

from app import USER_ID, mem  # nutzt dieselbe Mem0-Instanz/Config

DEFAULT_DB = os.environ.get("MC_MEMORY_DB", "/srv/models/mc2-memory.db")
MARKER = os.environ.get("MEM0_MIGRATION_MARKER", "/srv/models/mem0/.migrated_sqlite")


def main() -> int:
    db_path = sys.argv[1] if len(sys.argv) > 1 else DEFAULT_DB
    if os.path.exists(MARKER):
        print(f"Migration bereits erledigt (Marker {MARKER}).")
        return 0
    if not os.path.exists(db_path):
        print(f"Keine Alt-DB unter {db_path} — nichts zu migrieren.")
        os.makedirs(os.path.dirname(MARKER), exist_ok=True)
        open(MARKER, "w").close()
        return 0

    conn = sqlite3.connect(db_path)
    conn.row_factory = sqlite3.Row
    try:
        rows = conn.execute(
            "SELECT content, category, source FROM memories ORDER BY created_at"
        ).fetchall()
    except sqlite3.OperationalError:
        rows = []
    conn.close()

    m = mem()
    n = 0
    for r in rows:
        content = (r["content"] or "").strip()
        if not content:
            continue
        m.add([{"role": "user", "content": content}], user_id=USER_ID, infer=False,
               metadata={"category": r["category"] or "stable",
                         "source": r["source"] or "migrated"})
        n += 1

    os.makedirs(os.path.dirname(MARKER), exist_ok=True)
    open(MARKER, "w").close()
    print(f"Migriert: {n} Einträge aus {db_path} → Mem0.")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
