"""Seed default master data: pipeline stages, key skills and designations.

Safe to re-run — existing rows are kept (get_or_create).
Skills/designations need a created_by user, so run seed_demo_users.py first
(falls back to any superuser).
"""
import django
import os
import sys


def seed_data(stdout=None):
    from django.contrib.auth import get_user_model
    from apps.pipeline.models import PipelineStage
    from apps.master_skills.models import MasterSkill
    from apps.master_designations.models import MasterDesignation

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

    User = get_user_model()
    admin = (
        User.objects.filter(email="ats@admin.com").first()
        or User.objects.filter(is_superuser=True).first()
    )
    if not admin:
        log("No admin user found — run seed_demo_users.py first.")
        return

    # ------------------------------------------------------------------
    # 1) Pipeline stages
    # ------------------------------------------------------------------
    STAGES = [
        ("Contacted",           "contacted",           10, "IN_PROGRESS"),
        ("Candidate Responded", "candidate-responded", 20, "IN_PROGRESS"),
        ("Screening",           "screening",           30, "IN_PROGRESS"),
        ("Interview Scheduled", "interview-scheduled", 40, "IN_PROGRESS"),
        ("Interviewed",         "interviewed",         50, "IN_PROGRESS"),
        ("Offer Extended",      "offer-extended",      60, "IN_PROGRESS"),
        ("Offer Accepted",      "offer-accepted",      70, "WON"),
        ("Joined",              "joined",              80, "WON"),
        ("Rejected",            "rejected",            90, "LOST"),
        ("Candidate Declined",  "candidate-declined", 100, "LOST"),
    ]
    for name, code, order, outcome in STAGES:
        # Key on name (the unique column) so re-runs update existing rows
        # instead of trying to insert a duplicate name with a new code.
        obj, created = PipelineStage.objects.update_or_create(
            name=name,
            defaults={"code": code, "sort_order": order, "outcome": outcome, "is_active": True},
        )
        log(f"{'Created' if created else 'Exists '} stage: {name}")

    # ------------------------------------------------------------------
    # 2) Key skills
    # ------------------------------------------------------------------
    SKILLS = [
        "Python", "Java", "JavaScript", "TypeScript", "PHP", "C#", "C++", "Go",
        "React", "Next.js", "Angular", "Vue.js", "Node.js", "Django", "Laravel",
        "Spring Boot", ".NET", "HTML", "CSS", "Tailwind CSS",
        "MySQL", "PostgreSQL", "MongoDB", "Redis", "Oracle",
        "AWS", "Azure", "Google Cloud", "Docker", "Kubernetes", "Linux", "Git",
        "REST API", "GraphQL", "Microservices", "CI/CD", "DevOps",
        "Data Analysis", "Machine Learning", "Power BI", "Excel",
        "Manual Testing", "Automation Testing", "Selenium",
        "UI/UX Design", "Figma",
        "Communication", "Team Leadership", "Project Management",
    ]
    for s in SKILLS:
        obj, created = MasterSkill.objects.get_or_create(
            name=s,
            defaults={"status": "ACTIVE", "created_by": admin, "updated_by": admin},
        )
        log(f"{'Created' if created else 'Exists '} skill: {s}")

    # ------------------------------------------------------------------
    # 3) Designations
    # ------------------------------------------------------------------
    DESIGNATIONS = [
        "Software Engineer", "Senior Software Engineer", "Lead Software Engineer",
        "Frontend Developer", "Backend Developer", "Full Stack Developer",
        "PHP Developer", "Python Developer", "Java Developer",
        "QA Engineer", "Automation Test Engineer", "DevOps Engineer",
        "UI/UX Designer", "Data Analyst", "Data Scientist",
        "Business Analyst", "Product Manager", "Project Manager",
        "Team Lead", "Technical Architect",
        "HR Executive", "HR Manager", "Recruiter", "Senior Recruiter",
        "Hiring Manager", "Talent Acquisition Specialist", "Intern",
    ]
    for d in DESIGNATIONS:
        obj, created = MasterDesignation.objects.get_or_create(
            name=d,
            defaults={"status": "ACTIVE", "created_by": admin, "updated_by": admin},
        )
        log(f"{'Created' if created else 'Exists '} designation: {d}")

    log("Master defaults seeding completed successfully!")


if __name__ == "__main__":
    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()
