# app/org/seed_motie.py
from __future__ import annotations
import re
from typing import Optional, Dict, Any, List

from app.services.supabase_service import get_client

sb = get_client()

MINISTRY = "MOTIE"

def slugify(s: str) -> str:
    s = (s or "").strip()
    s = re.sub(r"\s+", "-", s)
    s = re.sub(r"[^\w\-]+", "", s)
    return s.lower()

def add_unit(name: str, level: int, unit_type: Optional[str] = None,
             parent_id: Optional[int] = None, sort: int = 0, note: Optional[str] = None) -> int:
    slug = slugify(f"{level}-{name}")
    row = {
        "ministry": MINISTRY,
        "name": name,
        "unit_type": unit_type,
        "level": level,
        "slug": slug,
        "parent_id": parent_id,
        "sort_order": sort,
        "note": note,
    }
    r = sb.table("gov_org_units").insert(row).execute().data
    return r[0]["unit_id"]

def seed():
    # 1레벨: 장관
    lid_minister = add_unit("장관", level=1, unit_type="MINISTER", sort=10)

    # 장관실(컨테이너)
    lid_min_office = add_unit("장관실", level=3, unit_type="OFFICE", parent_id=lid_minister, sort=10)

    # 장관실 하위: 장관정책보좌관 / 대변인 / 감사관
    lid_policy_advisor = add_unit("장관정책보좌관", level=3, unit_type="ADVISOR", parent_id=lid_min_office, sort=10)
    lid_spokesperson  = add_unit("대변인", level=3, unit_type="SPOKESPERSON", parent_id=lid_min_office, sort=20)
    lid_inspector     = add_unit("감사관", level=3, unit_type="INSPECTOR", parent_id=lid_min_office, sort=30)

    # 대변인 하위: 홍보담당관, 홍보지원팀
    add_unit("홍보담당관", level=4, unit_type="DIRECTORATE", parent_id=lid_spokesperson, sort=10)
    add_unit("홍보지원팀", level=5, unit_type="TEAM",        parent_id=lid_spokesperson, sort=20)

    # 감사관 하위: 감사담당관
    add_unit("감사담당관", level=4, unit_type="DIRECTORATE", parent_id=lid_inspector, sort=10)

    # 2레벨: 제1차관, 제2차관, 통상교섭본부장
    lid_vm1 = add_unit("제1차관", level=2, unit_type="VICE_MINISTER", parent_id=lid_minister, sort=10)
    lid_vm2 = add_unit("제2차관", level=2, unit_type="VICE_MINISTER", parent_id=lid_minister, sort=20)
    lid_ctn = add_unit("통상교섭본부장", level=2, unit_type="CHIEF_NEGOTIATOR", parent_id=lid_minister, sort=30)

    # 제1차관 하위: 운영지원과
    add_unit("운영지원과", level=5, unit_type="DIVISION", parent_id=lid_vm1, sort=10)

    # 통상교섭본부장 하위: 통상차관보
    add_unit("통상차관보", level=3, unit_type="VICE_MINISTER_ASSISTANT", parent_id=lid_ctn, sort=10)

    # === 예시용 3~5레벨 샘플(필요 시 확장) ===
    # 실/국 예시 (3레벨)
    lid_planning_bureau = add_unit("기획조정실", level=3, unit_type="BUREAU", parent_id=lid_vm1, sort=20)
    lid_industry_bureau = add_unit("산업정책실", level=3, unit_type="BUREAU", parent_id=lid_vm1, sort=30)

    # (4레벨) ~~관
    lid_policy_office = add_unit("정책관", level=4, unit_type="DIRECTORATE", parent_id=lid_planning_bureau, sort=10)
    lid_materials_office = add_unit("소재부품장비정책관", level=4, unit_type="DIRECTORATE", parent_id=lid_industry_bureau, sort=10)

    # (5레벨) ~~담당관/과/팀
    add_unit("정책총괄과", level=5, unit_type="DIVISION", parent_id=lid_policy_office, sort=10)
    add_unit("소재정책과", level=5, unit_type="DIVISION", parent_id=lid_materials_office, sort=10)
    add_unit("부품정책과", level=5, unit_type="DIVISION", parent_id=lid_materials_office, sort=20)
    add_unit("장비정책과", level=5, unit_type="DIVISION", parent_id=lid_materials_office, sort=30)

    print("[OK] MOTIE org units seeded.")

if __name__ == "__main__":
    seed()
