import customtkinter as ctk
import os
from view.theme import theme_manager
from utils.path_utils import get_base_dir

class LogViewerDialog(ctk.CTkToplevel):
    def __init__(self, parent):
        super().__init__(parent)
        self.title("시스템 로그 뷰어")
        self.geometry("800x600")
        self.transient(parent) # 부모 창 종속
        self.lift() # 부모 창 위로 올림
        
        # 로그 파일 경로
        self.log_file = get_base_dir() / "logs" / "voc_monitor.log"
        
        # 1. 헤더 (타이틀 + 새로고침 버튼)
        self.header_frame = ctk.CTkFrame(self)
        self.header_frame.pack(fill="x", padx=10, pady=10)
        
        self.title_label = ctk.CTkLabel(self.header_frame, text="최근 시스템 로그", 
                                      font=theme_manager.get_font(16, "bold"))
        self.title_label.pack(side="left", padx=10)
        
        self.refresh_btn = ctk.CTkButton(self.header_frame, text="새로고침", width=80,
                                       command=self.load_logs, font=theme_manager.get_font(12))
        self.refresh_btn.pack(side="right", padx=10)

        # 2. 로그 텍스트 영역
        self.textbox = ctk.CTkTextbox(self, font=theme_manager.get_font(12))
        self.textbox.pack(fill="both", expand=True, padx=10, pady=(0, 10))
        
        # 초기 로드
        self.load_logs()
        
        # esc 닫기
        self.bind("<Escape>", lambda e: self.destroy())

    def load_logs(self):
        """로그 파일을 읽어 텍스트 박스에 표시합니다."""
        self.textbox.configure(state="normal")
        self.textbox.delete("1.0", "end")
        
        if not self.log_file.exists():
            self.textbox.insert("1.0", "로그 파일이 존재하지 않습니다.\n")
        else:
            try:
                # 마지막 2000줄 또는 전체 읽기 (너무 크면 문제될 수 있으므로 뒤에서부터 읽는게 좋지만, 
                # 간단하게 전체를 읽고 마지막 부분을 보여주는 방식으로 구현)
                with open(self.log_file, "r", encoding="utf-8") as f:
                    content = f.read()
                    self.textbox.insert("1.0", content)
                    self.textbox.see("end") # 스크롤을 맨 아래로
            except Exception as e:
                self.textbox.insert("end", f"\n[Error] 로그 파일을 읽는 중 오류가 발생했습니다: {e}")
                
        self.textbox.configure(state="disabled") # 읽기 전용
