"""
階層構造商品マスターデモアプリケーション
入れ子構造とPDF巨大カッコ表示に対応
"""

import flet as ft
import signal
import sys
import logging
from components.hierarchical_product_master import create_hierarchical_product_master

class HierarchicalProductMasterApp:
    """階層構造商品マスターデモアプリケーション"""
    
    def __init__(self, page: ft.Page):
        self.page = page
        
        # ログ設定
        logging.basicConfig(
            level=logging.INFO,
            format='%(asctime)s - %(levelname)s - %(message)s',
            handlers=[
                logging.FileHandler('app.log'),
                logging.StreamHandler()
            ]
        )
        
        # シグナルハンドラ設定
        def signal_handler(signum, frame):
            print(f"\nシグナル {signum} を受信しました")
            print("✅ 正常終了処理完了")
            logging.info("アプリケーション正常終了")
            sys.exit(0)
        
        self.signal_handler = signal_handler
        
        signal.signal(signal.SIGINT, signal_handler)
        signal.signal(signal.SIGTERM, signal_handler)
        
        # ウィンドウ設定
        page.title = "階層構造商品マスター"
        page.window_width = 1400
        page.window_height = 800
        page.theme_mode = ft.ThemeMode.LIGHT
        
        # ウィンドウクローズイベント
        page.on_window_close = lambda _: signal_handler(0, None)
        
        # 階層商品マスター作成
        self.product_master = create_hierarchical_product_master(page)
        
        # ヘッダー
        self.header = ft.Container(
            content=ft.Column([
                ft.Row([
                    ft.Icon(
                        ft.Icons.INVENTORY_2,
                        size=40,
                        color=ft.Colors.BLUE_900
                    ),
                    ft.Column([
                        ft.Text(
                            "階層構造商品マスター",
                            size=28,
                            weight=ft.FontWeight.BOLD,
                            color=ft.Colors.BLUE_900
                        ),
                        ft.Text(
                            "入れ子構造とPDF巨大カッコ表示に対応した商品管理システム",
                            size=14,
                            color=ft.Colors.GREY_600
                        )
                    ], spacing=5)
                ], alignment=ft.MainAxisAlignment.START),
                ft.Divider(height=2, thickness=2)
            ], spacing=10),
            padding=20,
            bgcolor=ft.Colors.BLUE_50,
            border_radius=10,
            margin=ft.Margin.only(bottom=20)
        )
        
        # 操作説明
        self.instructions = ft.Container(
            content=ft.Column([
                ft.Text(
                    "操作方法",
                    size=16,
                    weight=ft.FontWeight.BOLD,
                    color=ft.Colors.BLUE_900
                ),
                ft.Text("• 左側のツリーから商品を選択して編集", size=12),
                ft.Text("• カテゴリの展開/折りたたみ：▶/▼アイコンをクリック", size=12),
                ft.Text("• 新規追加：選択中のノードの子として追加", size=12),
                ft.Text("• PDFプレビュー：階層構造をキャラクターベースで表示", size=12),
                ft.Text("• 巨大カッコ：PDF出力時に階層を視覚的に表現", size=12),
            ], spacing=5),
            padding=15,
            bgcolor=ft.Colors.GREY_50,
            border_radius=10,
            margin=ft.Margin.only(bottom=20)
        )
        
        # メインコンテナ
        self.main_container = ft.Column([
            self.header,
            self.instructions,
            self.product_master.build()
        ], expand=True, spacing=20)
        
        # ページに追加
        page.add(
            ft.Container(
                content=self.main_container,
                padding=20,
                bgcolor=ft.Colors.GREY_100,
                expand=True
            )
        )
        
        logging.info("階層構造商品マスターアプリ起動完了")
        print("🚀 階層構造商品マスターアプリ起動完了")

def main(page: ft.Page):
    """メイン関数"""
    try:
        app = HierarchicalProductMasterApp(page)
        
    except Exception as e:
        logging.error(f"アプリケーション起動エラー: {e}")

if __name__ == "__main__":
    ft.run(main)
