"""One-off seed: Marathi + Hinglish translations for the ORIGINAL 5-page pilot's
16 "help" namespace keys (master-iso-language, dashboard, warranty-tracking,
contracts, custody-assign) — these were only ever translated into Hindi by
seed_translations_help.py, leaving mr/hinglish at 493/509 instead of 509/509.
This closes that gap for full parity with Hindi.

Usage: docker compose exec api python seed_translations_help_pilot_mr_hinglish.py
"""
import asyncio
import uuid
from datetime import datetime, timezone

from sqlalchemy import text
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine

from ams.core.config import settings

NAMESPACE = "help"

VALUES_BY_LANG = {
    "mr": {
        "master-iso-language.title": "भाषा मास्टर",
        "master-iso-language.body.0": "हे पेज ॲप कोणकोणत्या भाषांमध्ये दाखवू शकते आणि प्रत्येक भाषेत ॲपचा किती भाग भाषांतरित आहे हे नियंत्रित करते.",
        "master-iso-language.body.1": "नवीन भाषा जोडा, नंतर एकेक शब्द भाषांतरित करा किंवा Excel शीट डाउनलोड करून भरा आणि परत अपलोड करा.",
        "master-iso-language.body.2": "एखादी भाषा टॉप मेनूमध्ये तेव्हाच दिसते जेव्हा ती Active केली जाते — आणि ती 100% भाषांतरित झाल्यावरच सक्रिय करता येते.",

        "dashboard.title": "एंटरप्राइझ डॅशबोर्ड",
        "dashboard.body.0": "ही तुमची सुरुवातीची स्क्रीन आहे — संस्थेतील एसेट्स, अलर्ट्स आणि क्रियाकलापांचा त्वरित सारांश.",
        "dashboard.body.1": "समस्या लवकर ओळखण्यासाठी येथील कार्ड्स आणि चार्ट्स वापरा, नंतर तपशीलांसाठी संबंधित मॉड्यूलमध्ये जा.",

        "warranty-tracking.title": "वारंटी आणि विमा",
        "warranty-tracking.body.0": "प्रत्येक एसेटची वारंटी आणि विमा कव्हरेज एकाच ठिकाणी ट्रॅक करा, प्रत्येक कधी संपते यासह.",
        "warranty-tracking.body.1": "येथून विमा दावे नोंदवा आणि त्यांचा पाठपुरावा करा, आणि सध्या कोणत्या एसेट्सवर सक्रिय कव्हरेज नाही ते पहा.",

        "contracts.title": "वेंडर करार",
        "contracts.body.0": "एकाच स्क्रीनवरून प्रत्येक वेंडर करार — AMC, सर्व्हिस आणि मास्टर करार — व्यवस्थापित करा.",
        "contracts.body.1": "सर्व्हिस-लेव्हल करार, इनव्हॉइस आणि नूतनीकरण तारखा ट्रॅक करा, आणि प्रत्येक वेंडरशी झालेला पत्रव्यवहार नोंदवा.",

        "custody-assign.title": "कस्टोडियन नियुक्त करा",
        "custody-assign.body.0": "एखादा एसेट, त्याची जबाबदारी घेणाऱ्या व्यक्तीकडे सोपवण्यासाठी हे पेज वापरा.",
        "custody-assign.body.1": "एकदा नियुक्त झाल्यावर, ती व्यक्ती एसेट हस्तांतरित किंवा परत होईपर्यंत त्यासाठी जबाबदार राहते.",
    },
    "hinglish": {
        "master-iso-language.title": "Language Master",
        "master-iso-language.body.0": "Ye page control karta hai ki app kaunsi bhaashaon mein dikh sakta hai, aur har bhaasha mein app ka kitna hissa translate hua hai.",
        "master-iso-language.body.1": "Nayi bhaasha add karein, phir ya to word-by-word translate karein ya Excel sheet download karke bharein aur wapas upload karein.",
        "master-iso-language.body.2": "Koi bhaasha top menu mein tabhi dikhti hai jab use Active kiya jaaye — aur ye tabhi ho sakta hai jab wo 100% translate ho chuki ho.",

        "dashboard.title": "Enterprise Dashboard",
        "dashboard.body.0": "Ye aapki starting screen hai — organization ke assets, alerts, aur activity ka quick summary.",
        "dashboard.body.1": "Problems jaldi pehchanne ke liye yahan ke cards aur charts use karein, phir details ke liye relevant module mein jaayein.",

        "warranty-tracking.title": "Warranty & Insurance",
        "warranty-tracking.body.0": "Har asset ki warranty aur insurance coverage ek hi jagah track karein, including ye ki kab kaunsi expire ho rahi hai.",
        "warranty-tracking.body.1": "Yahan se insurance claims file karein aur unka follow-up karein, aur dekhein ki kaunse assets par abhi koi active coverage nahi hai.",

        "contracts.title": "Vendor Contracts",
        "contracts.body.0": "Ek hi screen se har vendor contract — AMC, service, aur master agreements — manage karein.",
        "contracts.body.1": "Service-level agreements, invoices, aur renewal dates track karein, aur har vendor ke saath correspondence log karein.",

        "custody-assign.title": "Assign Custodian",
        "custody-assign.body.0": "Kisi asset ko us person ko handover karne ke liye ye page use karein jo uski responsibility lega.",
        "custody-assign.body.1": "Ek baar assign hone ke baad, wo person asset ke transfer ya return hone tak uske liye accountable hota hai.",
    },
}


async def seed_translation_values(session: AsyncSession, lang_code: str, values: dict) -> tuple[int, list[str]]:
    now = datetime.now(timezone.utc)
    inserted = 0
    unmatched = []
    for key, value in values.items():
        key_id = (await session.execute(
            text("SELECT id FROM translation_keys WHERE namespace = :ns AND key = :key"),
            {"ns": NAMESPACE, "key": key},
        )).scalar_one_or_none()
        if not key_id:
            unmatched.append(key)
            continue

        existing = (await session.execute(
            text("SELECT id FROM translation_values WHERE key_id = :kid AND language_code = :lc"),
            {"kid": key_id, "lc": lang_code},
        )).scalar_one_or_none()
        if existing:
            await session.execute(
                text("UPDATE translation_values SET value = :val, updated_at = :now WHERE id = :id"),
                {"val": value, "now": now, "id": existing},
            )
        else:
            await session.execute(
                text("""INSERT INTO translation_values (id, key_id, language_code, value, updated_by, updated_at)
                        VALUES (:id, :kid, :lc, :val, NULL, :now)"""),
                {"id": str(uuid.uuid4()), "kid": key_id, "lc": lang_code, "val": value, "now": now},
            )
            inserted += 1

    await session.commit()
    return inserted, unmatched


async def main() -> None:
    engine = create_async_engine(settings.DATABASE_URL, echo=False)
    Session = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)

    async with Session() as session:
        tenants = (await session.execute(
            text("SELECT id::text AS id, slug FROM public.tenants WHERE status != 'archived'")
        )).fetchall()

    for tenant in tenants:
        schema = f"tenant_{tenant.id.replace('-', '_')}"
        async with Session() as session:
            await session.execute(text(f"SET search_path TO {schema}, public"))
            try:
                results = []
                for lang_code, values in VALUES_BY_LANG.items():
                    inserted, unmatched = await seed_translation_values(session, lang_code, values)
                    note = f" ({len(unmatched)} unmatched)" if unmatched else ""
                    results.append(f"{lang_code}={inserted}{note}")
                print(f"  seeded {', '.join(results)}: {tenant.slug}")
            except Exception as exc:
                print(f"  SKIPPED {tenant.slug}: {exc}")
                await session.rollback()

    await engine.dispose()
    print(f"Done — {len(tenants)} tenant(s) processed.")


if __name__ == "__main__":
    asyncio.run(main())
