import django
import os
import sys


def seed_data(stdout=None):
    from apps.users.models import User
    from django.contrib.auth.models import Group

    def log(message):
        if stdout:
            stdout.write(message)
        else:
            print(message)

    # ------------------------------------------------------------------
    # 1) Role (group) seeder
    # ------------------------------------------------------------------
    ROLES = [
        "ADMIN",            # super admin
        "HIRING_MANAGER",
        "PROJECT_MANAGER",
        "RECRUITER",
        "INTERVIEWER",
        "CANDIDATE",
    ]
    for g in ROLES:
        _, created = Group.objects.get_or_create(name=g)
        log(f"{'Created' if created else 'Exists '} group: {g}")

    # Remove old roles that are no longer part of the seed set
    removed, _ = Group.objects.filter(name__in=["TA_MANAGER"]).delete()
    if removed:
        log("Removed old group: TA_MANAGER")

    # ------------------------------------------------------------------
    # 2) User seeder — name matches the role, email pattern ats@<role>.com,
    #    common password: ats@2468
    # ------------------------------------------------------------------
    PASSWORD = "ats@2468"
    demo_users = [
        {"email": "ats@admin.com",          "role": "ADMIN",           "full_name": "Admin",           "is_superuser": True,  "is_staff": True},
        {"email": "ats@hiringmanager.com",  "role": "HIRING_MANAGER",  "full_name": "Hiring Manager",  "is_superuser": False, "is_staff": False},
        {"email": "ats@projectmanager.com", "role": "PROJECT_MANAGER", "full_name": "Project Manager", "is_superuser": False, "is_staff": False},
        {"email": "ats@recruiter.com",      "role": "RECRUITER",       "full_name": "Recruiter",       "is_superuser": False, "is_staff": False},
        {"email": "ats@interviewer.com",    "role": "INTERVIEWER",     "full_name": "Interviewer",     "is_superuser": False, "is_staff": False},
        {"email": "ats@candidate.com",      "role": "CANDIDATE",       "full_name": "Candidate",       "is_superuser": False, "is_staff": False},
    ]

    # Remove the previous demo users (old seed set)
    OLD_DEMO_EMAILS = [
        "admin@ats.com",
        "ta_manager@ats.com",
        "pm@ats.com",
        "recruiter@ats.com",
        "hiring_manager@ats.com",
        "candidate@ats.com",
    ]
    deleted, _ = User.objects.filter(email__in=OLD_DEMO_EMAILS).delete()
    if deleted:
        log(f"Removed {deleted} old demo user record(s)")

    for u_data in demo_users:
        user = User.objects.filter(email=u_data["email"]).first()
        if user:
            user.role = u_data["role"]
            user.full_name = u_data["full_name"]
            user.is_superuser = u_data["is_superuser"]
            user.is_staff = u_data["is_staff"]
            user.set_password(PASSWORD)
            user.save()
            log(f"Updated user {user.email}")
        else:
            user = User.objects.create_user(
                email=u_data["email"],
                password=PASSWORD,
                role=u_data["role"],
                full_name=u_data["full_name"],
                username=u_data["email"].split("@")[0] + "_" + u_data["role"].lower(),
                is_superuser=u_data["is_superuser"],
                is_staff=u_data["is_staff"],
            )
            log(f"Created user {user.email}")
        user.sync_role_group()

    log("Seeding completed successfully!")
    log(f"All seed users share the password: {PASSWORD}")


if __name__ == "__main__":
    # Set up Django
    sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.dev")
    django.setup()

    seed_data()
