import pystray
from view.ui_utils import asset_loader

class SystemTray:
    """
    시스템 트레이 아이콘 및 메뉴를 관리하는 클래스.
    pystray 라이브러리를 사용하여 트레이 아이콘을 생성하고 백그라운드 실행을 지원합니다.
    """
    def __init__(self, controller):
        self.controller = controller
        self.icon = None

    def create_modern_icon(self):
        """에셋 로더를 통해 Tray 아이콘(PIL Image)을 생성하여 반환합니다."""
        return asset_loader.get_tray_icon_image()

    def run(self, on_check, on_update, on_list, on_settings, on_quit):
        """
        트레이 아이콘을 실행하고 메뉴 이벤트를 바인딩합니다.
        
        Args:
            on_check (func): '지금 확인' 메뉴 핸들러
            on_update (func): '업데이트 확인' 메뉴 핸들러
            on_list (func): 'VOC 모니터링 열기' 메뉴 핸들러
            on_settings (func): '설정' 메뉴 핸들러
            on_quit (func): '종료' 메뉴 핸들러
        """
        # 메뉴 구성
        menu = (
             pystray.MenuItem('VOC 모니터링 열기', lambda *args: on_list()), # 메인 기능
             pystray.Menu.SEPARATOR,
             pystray.MenuItem('지금 확인 (수동)', lambda *args: on_check()),
             pystray.MenuItem('업데이트 확인', lambda *args: on_update()),
             pystray.MenuItem('설정', lambda *args: on_settings()),
             pystray.MenuItem('종료', lambda *args: on_quit()),
        )
        # 아이콘 로드 및 실행
        self.icon = pystray.Icon(
            "VOC_Monitor", 
            self.create_modern_icon(), 
            "VOC 알리미", 
            menu
        )
        self.icon.run()

    def stop(self):
        """트레이 아이콘을 종료하고 리소스를 정리합니다."""
        if self.icon:
            self.icon.stop()

    def show_notification(self, title, msg, voc_id=None):
        """커스텀 알림 창 표시 (메인 스레드에서 실행)"""
        # controller.root.after를 사용하여 메인 스레드에서 UI 생성 보장
        # 순환 참조 방지를 위해 지역 import 사용
        from view.components.notification import NotificationView
        self.controller.root.after(0, lambda: NotificationView(self.controller, title=title, msg=msg, voc_id=voc_id))
