"""
config
プロジェクト共通の設定値を管理するモジュール
環境固有の値は .env ファイルから読み込む
"""

import os
from pathlib import Path

from dotenv import load_dotenv

# .env ファイルの読み込み（src/ の親ディレクトリを探索）
_env_path = Path(__file__).resolve().parent.parent.parent / ".env"
load_dotenv(_env_path)

# ── ネットワーク設定（.env から読み込み） ──────────────────────

# PC の IP アドレス
PC_IP: str = os.getenv("PC_IP", "127.0.0.1")

# 画像送信ポート（Pi → PC）
IMAGE_PORT: int = int(os.getenv("IMAGE_PORT", "5555"))

# 操舵量送信ポート（PC → Pi）
CONTROL_PORT: int = int(os.getenv("CONTROL_PORT", "5556"))

# ── 画像設定 ──────────────────────────────────────────────

# カメラ画像の幅 (px)
FRAME_WIDTH: int = 320

# カメラ画像の高さ (px)
FRAME_HEIGHT: int = 240

# JPEG 圧縮品質 (0-100)
JPEG_QUALITY: int = 55

# ── 通信設定 ──────────────────────────────────────────────

# 操舵量の送信頻度 (Hz)
CONTROL_PUBLISH_HZ: float = 20.0

# 操舵量の受信タイムアウト (秒)，超過でモーター停止
CONTROL_TIMEOUT_SEC: float = 0.5

# ── モーター設定（GPIO ピン番号，BOARD モード） ───────────

# モーター A（左）
MA_IN1: int = 19
MA_IN2: int = 21
MA_PWM: int = 23

# モーター B（右）
MB_IN1: int = 15
MB_IN2: int = 13
MB_PWM: int = 11

# モーター PWM 周波数 (Hz)
MOTOR_PWM_FREQ: int = 100

# モーター極性反転フラグ
MOTOR_LEFT_REVERSED: bool = True
MOTOR_RIGHT_REVERSED: bool = True

# ステアリング方向反転フラグ
STEER_REVERSED: bool = True


# ── アドレス生成ヘルパー ──────────────────────────────────


def image_bind_address() -> str:
    """画像受信側（PC）のバインドアドレスを返す"""
    return f"tcp://*:{IMAGE_PORT}"


def image_connect_address() -> str:
    """画像送信側（Pi）の接続先アドレスを返す"""
    return f"tcp://{PC_IP}:{IMAGE_PORT}"


def control_bind_address() -> str:
    """操舵量送信側（PC）のバインドアドレスを返す"""
    return f"tcp://*:{CONTROL_PORT}"


def control_connect_address() -> str:
    """操舵量受信側（Pi）の接続先アドレスを返す"""
    return f"tcp://{PC_IP}:{CONTROL_PORT}"
