"""
伝票入力フレームワークデモアプリケーション
"""

import flet as ft
import sqlite3
import signal
import sys
import logging
from components.slip_entry_framework import SlipEntryFramework, create_slip_entry_framework

class SlipFrameworkDemoApp:
    """伝票入力フレームワークデモアプリケーション"""
    
    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)
        
        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.slip_framework = create_slip_entry_framework(page)
        
        # ページ構築
        page.add(
            self.slip_framework.build()
        )
        
        logging.info("伝票入力フレームワークデモ起動完了")
        print("🚀 伝票入力フレームワークデモ起動完了")
        
    def _init_database(self):
        """データベース初期化"""
        try:
            conn = sqlite3.connect('sales.db')
            cursor = conn.cursor()
            
            # 伝票テーブル作成
            cursor.execute('''
                CREATE TABLE IF NOT EXISTS slips (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    title TEXT NOT NULL,
                    theme_name TEXT NOT NULL,
                    items_data TEXT NOT NULL,
                    total_amount REAL NOT NULL,
                    created_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 = SlipFrameworkDemoApp(page)
        
    except Exception as e:
        logging.error(f"アプリケーション起動エラー: {e}")

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