#!/usr/bin/env python
"""Centralized TA-ATS seeder — runs every seeder in the correct order.

This is the single entry point for seeding. It runs `manage.py migrate` first,
then each seeder script in this folder in dependency order.

Usage (from the backend/ folder):
    ./venv/bin/python master_seeder/seed_all.py              # core seed (menus, perms, master data)
    ./venv/bin/python master_seeder/seed_all.py --with-demo  # also seed demo clients/JDs/candidates

Settings: honours DJANGO_SETTINGS_MODULE if already exported (e.g.
`export DJANGO_SETTINGS_MODULE=config.settings.prod` on the server),
otherwise defaults to config.settings.dev.
"""
import os
import subprocess
import sys

HERE = os.path.dirname(os.path.abspath(__file__))   # .../backend/master_seeder
BACKEND = os.path.dirname(HERE)                      # .../backend
PY = sys.executable


def _s(name):
    return [PY, os.path.join(HERE, name)]


# (label, command) — order matters.
CORE = [
    ("Roles (6 groups) + demo users", _s("seed_demo_users.py")),
    ("Group permissions",             _s("update_permissions.py")),
    # ---- left-side (sidebar) menus ----
    ("Menu: Master Data",             _s("add_master_data_menus.py")),
    ("Menu: Skills",                  _s("add_master_skills_menu.py")),
    ("Menu: Reports",                 _s("add_reports_menu.py")),
    ("Menu: Notification templates",  _s("add_notification_templates_menu.py")),
    ("Menu: Export",                  _s("add_export_menu.py")),
    ("Menu: Company LinkedIn",        _s("add_company_linkedin_menu.py")),
    ("Menu: Master Education (+data)",_s("seed_education_master.py")),
    ("Menu: AKN admin menus",         _s("seed_akn_updates.py")),
    ("AI pipeline stages",            _s("add_ai_stages.py")),
    # ---- master data (values) ----
    ("Data: India geo",               _s("seed_india_data.py")),
    ("Data: World geo",               _s("seed_world_data.py")),
    ("Data: pipeline/skills/desig",   _s("seed_master_defaults.py")),
    ("Data: Notice & languages",      _s("seed_notice_periods_and_languages.py")),
    ("Data: Education & CTC",         _s("seed_education_and_ctc.py")),
    ("Data: Notification templates",  _s("seed_notification_templates.py")),
]

DEMO = [
    ("Demo: clients + JDs", _s("seed_clients_jds.py")),
    ("Demo: candidates",    _s("seed_candidates.py")),
]


def run(steps):
    env = dict(os.environ)
    env["PYTHONPATH"] = BACKEND + os.pathsep + env.get("PYTHONPATH", "")
    env.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.dev")
    print(f"Settings: {env['DJANGO_SETTINGS_MODULE']}\nBackend : {BACKEND}\n")

    print("=== [Database migrations] ===")
    if subprocess.run([PY, "manage.py", "migrate"], cwd=BACKEND, env=env).returncode != 0:
        print("!! migrate failed — aborting.")
        return 1

    failed = []
    for label, cmd in steps:
        print(f"\n=== [{label}] ===")
        if subprocess.run(cmd, cwd=BACKEND, env=env).returncode != 0:
            print(f"!! FAILED: {label}")
            failed.append(label)

    print("\n" + "=" * 56)
    if failed:
        print("Completed WITH FAILURES:")
        for f in failed:
            print("   -", f)
        return 1
    print("All seeders completed successfully.")
    print("Login: ats@admin.com / ats@2468")
    return 0


if __name__ == "__main__":
    steps = list(CORE)
    if "--with-demo" in sys.argv:
        steps += DEMO
    sys.exit(run(steps))
