"""Seed default users (one per role) + a demo company for the CompanyRep.

Run from project root (after init_db): `python migrations/seed_users.py`
Idempotent: clears and re-inserts. DEV credentials only — replace in production.
"""

from __future__ import annotations

import sys
from pathlib import Path

PROJECT_ROOT = Path(__file__).resolve().parent.parent
if str(PROJECT_ROOT) not in sys.path:
    sys.path.insert(0, str(PROJECT_ROOT))

from sqlmodel import Session, create_engine, delete, select  # noqa: E402

from models import Companies, Users  # noqa: E402
from services.auth import hash_password  # noqa: E402

DB_PATH = PROJECT_ROOT / "fmcg.db"

# (email, plaintext_password, role) — DEV defaults
USERS: list[tuple[str, str, str]] = [
    ("admin@fmcg", "admin123", "Admin"),
    ("expert@fmcg", "expert123", "Expert"),
    ("rep@fmcg", "rep123", "CompanyRep"),
]


def seed_users() -> None:
    engine = create_engine(f"sqlite:///{DB_PATH}")
    with Session(engine) as s:
        s.exec(delete(Users))
        s.commit()

        # Ensure a demo company exists for the CompanyRep link.
        demo = s.exec(
            select(Companies).where(Companies.name == "Демо ТОВ")
        ).first()
        if demo is None:
            demo = Companies(name="Демо ТОВ", edrpou="00000000")
            s.add(demo)
            s.commit()
            s.refresh(demo)

        for email, password, role in USERS:
            company_id = demo.id if role == "CompanyRep" else None
            s.add(Users(
                email=email,
                hashed_password=hash_password(password),
                role=role,
                company_id=company_id,
            ))
        s.commit()
        print(f"Seeded {len(USERS)} users (demo company id={demo.id})")


if __name__ == "__main__":
    seed_users()
