"""
給与システムデータベース初期化スクリプト
Payroll Database Initialization Script
"""
import psycopg
import os
from dotenv import load_dotenv

# 環境変数を読み込む
load_dotenv()

# データベース接続文字列を構築
DB_HOST = os.getenv("DB_HOST", "192.168.0.61")
DB_PORT = os.getenv("DB_PORT", "55432")
DB_NAME = os.getenv("DB_NAME", "njts_acct")
DB_USER = os.getenv("DB_USER", "njts_app")
DB_PASSWORD = os.getenv("DB_PASSWORD", "njts_app2025")

DATABASE_URL = f"postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}"

def create_payroll_database():
    """SQLファイルを実行してデータベースを初期化"""
    
    # SQLファイルのパスを取得
    import os
    script_dir = os.path.dirname(os.path.abspath(__file__))
    sql_file = os.path.join(script_dir, 'sql', 'payroll_schema_complete.sql')
    
    # SQLファイルを読み込む
    with open(sql_file, 'r', encoding='utf-8') as f:
        sql_script = f.read()
    
    try:
        # データベースに接続
        print(f"データベースに接続中: {DATABASE_URL}")
        conn = psycopg.connect(DATABASE_URL)
        
        # トランザクションを開始
        with conn:
            with conn.cursor() as cur:
                # SQLスクリプトを実行
                print("SQLスクリプトを実行中...")
                cur.execute(sql_script)
                print("✅ データベースの初期化が完了しました！")
                
                # テーブル一覧を確認
                cur.execute("""
                    SELECT table_name 
                    FROM information_schema.tables 
                    WHERE table_schema = 'public' 
                    ORDER BY table_name
                """)
                tables = cur.fetchall()
                print("\n作成されたテーブル:")
                for table in tables:
                    print(f"  - {table[0]}")
                
                # 保険料率データを確認
                cur.execute("SELECT COUNT(*) FROM insurance_rates")
                count = cur.fetchone()[0]
                print(f"\n保険料率データ: {count}件")
                
        conn.close()
        print("\n✅ データベース初期化が正常に完了しました！")
        
    except Exception as e:
        print(f"\n❌ エラーが発生しました: {e}")
        print(f"\nエラーの詳細: {type(e).__name__}")
        raise

if __name__ == "__main__":
    create_payroll_database()
