import uuid
from sqlalchemy.orm import Session
from passlib.context import CryptContext

from app.models.user import User
from app.models.role import Role
from app.models.unit import Unit
from app.core.security import hash_password

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")


def seed_users(db: Session):
    # === ambil role ===
    role_admin = db.query(Role).filter(Role.slug == "admin").first()
    role_kanit = db.query(Role).filter(Role.slug == "kanit").first()
    role_pegawai = db.query(Role).filter(Role.slug == "pegawai").first()

    if not all([role_admin, role_kanit, role_pegawai]):
        raise Exception("Role belum di-seed (admin/kabag/kanit/pegawai)")

    # # === department ===
    # department = (
    #     db.query(Department)
    #     .filter(Department.name == "Pelayanan Medis & Keperawatan")
    #     .first()
    # )

    # if not department:
    #     department = Department(
    #         id=str(uuid.uuid4()),
    #         name="Pelayanan Medis & Keperawatan",
    #     )
    #     db.add(department)
    #     db.commit()
    #     db.refresh(department)

    # === unit ===
    rajal = db.query(Unit).filter(Unit.slug == "rajal").first()
    tu = db.query(Unit).filter(Unit.slug == "tu").first()
    admin = db.query(Unit).filter(Unit.slug == "admin").first()
    # === users data ===
    users = [
        {
            "name": "11111",
            "nip": "11111",
            "pin": "11111",
            "unit_id": admin.id,
            "role_id": role_admin.id,
        },
        {
            "name": "22222(TU)",
            "nip": "22222",
            "pin": "22222",
            "unit_id": tu.id,
            "role_id": role_kanit.id,
        },
        {
            "name": "33333(RAJAL)",
            "nip": "33333",
            "pin": "33333",
            "unit_id": rajal.id,
            "role_id": role_kanit.id,
        },
        {
            "name": "44444 (RAJAL)",
            "nip": "44444",
            "pin": "44444",
            "unit_id": rajal.id,
            "role_id": role_pegawai.id,
        },
    ]

    for data in users:
        exists = db.query(User).filter(User.nip == data["nip"]).first()
        if exists:
            continue

        user = User(
            id=str(uuid.uuid4()),
            name=data["name"],
            nip=data["nip"],
            pin=data["pin"],
            password=hash_password("password"),
            role_id=data["role_id"],
            unit_id=data["unit_id"],
            is_active=True,
        )
        db.add(user)

    db.commit()
