"""
競馬AI予想システム — 共通設定
接続情報は環境変数または .env（手動で export）で渡す。コードにパスワードを直書きしない。
"""
from __future__ import annotations

import os

try:
    from dotenv import load_dotenv

    _root = os.path.dirname(os.path.abspath(__file__))
    load_dotenv(os.path.join(_root, ".env"))
    # JV 接続だけ別ファイルにしたい場合（cron は環境変数が空になりやすい）
    _jv_local = os.path.join(_root, "config", "jv_local.env")
    if os.path.isfile(_jv_local):
        load_dotenv(_jv_local)
except ImportError:
    pass

_DB = os.environ
BASE_DIR = os.path.dirname(os.path.abspath(__file__))


def _get(key: str, default: str | None = None) -> str | None:
    v = _DB.get(key)
    if v is not None and v != "":
        return v
    return default


def _db_password() -> str:
    p = _get("KEIBA_DB_PASSWORD", "") or ""
    if p:
        return p
    php_path = os.path.join(BASE_DIR, "config", "db_local.php")
    if not os.path.isfile(php_path):
        return ""
    try:
        import subprocess

        r = subprocess.run(
            ["php", "-r", f"echo (require {repr(php_path)})['pass'];"],
            capture_output=True,
            text=True,
            timeout=5,
            check=False,
        )
        return (r.stdout or "").strip()
    except OSError:
        return ""


DB_HOST = _get("KEIBA_DB_HOST", "localhost")
DB_PORT = int(_get("KEIBA_DB_PORT", "3306") or "3306")
DB_NAME = _get("KEIBA_DB_NAME", "keiba_ai")
DB_USER = _get("KEIBA_DB_USER", "root")
DB_PASSWORD = _db_password()
DB_CHARSET = _get("KEIBA_DB_CHARSET", "utf8mb4")

DB_URL = (
    f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}"
    f"@{DB_HOST}:{DB_PORT}/{DB_NAME}"
    f"?charset={DB_CHARSET}"
)

REQUEST_INTERVAL = float(_get("KEIBA_REQUEST_INTERVAL", "2.0") or "2.0")
REQUEST_TIMEOUT = int(_get("KEIBA_REQUEST_TIMEOUT", "30") or "30")
REQUEST_HEADERS = {
    "User-Agent": (
        "Mozilla/5.0 (compatible; KeibaAI/0.1; +https://example.invalid)"
    ),
    "Accept-Language": "ja,en-US;q=0.9",
}

# 学習済みモデル
MODEL_DIR = os.path.join(BASE_DIR, "ai", "models")
LOG_DIR = _get("KEIBA_LOG_DIR", os.path.join(BASE_DIR, "logs")) or os.path.join(BASE_DIR, "logs")

# 対象は中央競馬（JRA）のみ。地方競馬は別プロジェクトまたは circuit=LOCAL で拡張可能
TARGET_CIRCUIT = _get("KEIBA_TARGET_CIRCUIT", "JRA") or "JRA"
