"""
設定管理モジュール
環境変数、ファイルパス、定数などの設定を一元管理します。
"""

import os
from pathlib import Path
from typing import Dict, Any

class Config:
    def __init__(self):
        self.base_dir = Path(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
        self.env = os.getenv("ENV", "production")
        
        # ファイルパス設定
        self.file_paths = {
            "log_file": self.base_dir / "app.log",
            "history_dir": self.base_dir / "file" / "status_history",
            "screenshot_dir": self.base_dir / "file" / "screen_shot",
        }
        
        # スプレッドシート設定
        self.spreadsheet = {
            "scopes": ['https://www.googleapis.com/auth/spreadsheets'],
            "service_account_file": os.getenv('PROD_SERVICE_ACCOUNT_FILE'),
            "target_sheet_id": os.getenv("SPREADSHEET_ID"),
            "management_range": "B4:F300",
            "entry_range": "A2:AJ500",
        }
        
        # ステップとステータスのマッピング
        self.step_mapping = {
            "1次選考中": "step_1",
            "2次選考中": "step_2",
            "3次選考中": "step_3",
            "4次選考中": "step_4",
            "5次選考中": "step_5",
            "最終選考前（B）": "step_final_b",
            "最終選考（A）": "step_final_a",
            "内定": "step_offer",
        }
        
        self.status_mapping = {
            "不採用": "status_rejected",
            "内定承諾": "status_accepted",
        }

    def get_file_path(self, key: str) -> Path:
        """ファイルパスを取得"""
        return self.file_paths.get(key)

    def get_spreadsheet_config(self) -> Dict[str, Any]:
        """スプレッドシート設定を取得"""
        return self.spreadsheet

    def get_step_id(self, step_name: str) -> str:
        """ステップ名からIDを取得"""
        return self.step_mapping.get(step_name)

    def get_status_id(self, status_name: str) -> str:
        """ステータス名からIDを取得"""
        return self.status_mapping.get(status_name)

    def ensure_directories(self) -> None:
        """必要なディレクトリが存在することを確認"""
        for path in self.file_paths.values():
            if isinstance(path, Path) and not path.is_file():
                path.parent.mkdir(parents=True, exist_ok=True)

# シングルトンインスタンスを作成
config = Config()
