"""
マスタ管理アプリケーション
統合的なマスタ管理機能を提供
"""

import flet as ft
import sqlite3
import signal
import sys
import logging
from components.master_editor import (
    CustomerMasterEditor, ProductMasterEditor, SalesSlipMasterEditor,
    create_customer_master, create_product_master, create_sales_slip_master
)

class MasterManagementApp:
    """マスタ管理アプリケーション"""
    
    def __init__(self, page: ft.Page):
        self.page = page
        ErrorHandler.current_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)
        
        signal.signal(signal.SIGINT, signal_handler)
        signal.signal(signal.SIGTERM, signal_handler)
        
        # データベース初期化
        self._init_database()
        
        # ウィンドウ設定
        page.title = "マスタ管理システム"
        page.window_width = 1000
        page.window_height = 700
        page.theme_mode = ft.ThemeMode.LIGHT
        
        # ウィンドウクローズイベント
        page.on_window_close = lambda _: signal_handler(0, None)
        
        # マスタエディタ作成
        self.customer_editor = create_customer_master(page)
        self.product_editor = create_product_master(page)
        self.sales_slip_editor = create_sales_slip_master(page)
        
        # 現在のエディタ
        current_editor = [0]
        
        # タブインターフェース
        tabs = ft.Tabs(
            selected_index=0,
            tabs=[
                ft.Tab(
                    text="顧客マスタ",
                    content=self.customer_editor.build()
                ),
                ft.Tab(
                    text="商品マスタ",
                    content=self.product_editor.build()
                ),
                ft.Tab(
                    text="伝票マスタ",
                    content=self.sales_slip_editor.build()
                )
            ],
            expand=True
        )
        
        # ページ構築
        page.add(
            ft.Column([
                ft.Text("マスタ管理システム", size=24, weight=ft.FontWeight.BOLD, color=ft.Colors.BLUE_900),
                ft.Divider(),
                ft.Text("各マスタデータの編集・管理が可能です", size=16),
                ft.Divider(),
                tabs
            ], expand=True, spacing=15)
        )
        
        logging.info("マスタ管理システム起動完了")
        print("🚀 マスタ管理システム起動完了")
        
    def _init_database(self):
        """データベース初期化"""
        try:
            conn = sqlite3.connect('sales.db')
            cursor = conn.cursor()
            
            # 各マスタテーブル作成
            cursor.execute('''
                CREATE TABLE IF NOT EXISTS customers (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    name TEXT NOT NULL,
                    phone TEXT,
                    email TEXT,
                    address TEXT,
                    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                )
            ''')
            
            cursor.execute('''
                CREATE TABLE IF NOT EXISTS products (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    name TEXT NOT NULL,
                    category TEXT,
                    price REAL NOT NULL,
                    stock INTEGER DEFAULT 0,
                    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                )
            ''')
            
            cursor.execute('''
                CREATE TABLE IF NOT EXISTS sales_slips (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    title TEXT NOT NULL,
                    customer_name TEXT NOT NULL,
                    items TEXT NOT NULL,
                    total_amount REAL NOT NULL,
                    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                )
            ''')
            
            conn.commit()
            conn.close()
            logging.info("マスタデータベース初期化完了")
            
        except Exception as e:
            logging.error(f"データベース初期化エラー: {e}")

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

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