import os
from pathlib import Path
from dotenv import load_dotenv

# .env 로드
BASE_DIR = Path(__file__).resolve().parents[2]
load_dotenv(BASE_DIR / ".env")

from app.crawlers.moef_org import get_org_links, parse_org_page
from app.services.moef_org_service import (
    clear_org, bulk_insert_org, clear_vip, bulk_insert_vip,
    get_all_departments, select_vip_by_department
)
from app.services.notify_service import broadcast_telegram
from app.services.supabase_service import get_active_chat_ids

# n8n의 포지션 OR 조건 목록 (중복 제거/정렬 약간)
VIP_POSITIONS = [
    "부총리","비서실장","대변인","정책보좌관","담당관","감사관","차관","기획관",
    "과장","팀장","차관보","실장","정책관","국장","단장","부단장","심의관",
    "관리관","사무처장","부이사관"
]

def run():
    ua = os.getenv("USER_AGENT", "govbot/1.0")

    # 1) moef_org 비우기
    clear_org()

    # 2~7) 링크 수집 → 각 링크의 표 파싱 → ORG 삽입
    links = get_org_links(ua)
    total = 0
    for i, meta in enumerate(links, 1):
        rows = parse_org_page(ua, meta["link"])
        # 혹시 페이지 전체가 빈 경우도 있어 방어
        if rows:
            total += bulk_insert_org(rows)

    # 9) moef_vip 전체 삭제
    clear_vip()

    # 10~12) 부서별 VIP 선별 → 없으면 빈 레코드로 보정(이름/직위/업무/전화 공란)
    depts = get_all_departments()
    vip_total = 0
    fallback_total = 0

    for dept in depts:
        cand = select_vip_by_department(dept, VIP_POSITIONS)
        if cand:
            vip_total += bulk_insert_vip(cand)
        else:
            # 11단계: 결과가 없으면 해당 부서에 대해 빈 레코드 1건 삽입
            vip_total += bulk_insert_vip([{
                "department": dept, "name": "", "position": "", "task": "", "phone": ""
            }])
            fallback_total += 1

    # 알림(옵션)
    cids = get_active_chat_ids()
    if cids:
        msg = (
            f"[MOEF 조직도] ORG {total}건 갱신, "
            f"VIP {vip_total}건 선별(빈 보정 {fallback_total}건 포함)"
        )
        broadcast_telegram(msg, cids)

if __name__ == "__main__":
    run()
