"""
SEAO Scraper Configuration
Loads settings from .env file and environment variables.
"""

import os
import logging
from datetime import datetime, timezone, timedelta
from dotenv import load_dotenv

# Load .env file from the same directory as this script
_script_dir = os.path.dirname(os.path.abspath(__file__))
_dotenv_path = os.path.join(_script_dir, ".env")
load_dotenv(dotenv_path=_dotenv_path)


def get_env(key: str, default: str = "") -> str:
    """Get environment variable with fallback to .env."""
    return os.getenv(key, default).strip()


# Database
DB_PATH = get_env("DB_PATH", "/app/data/seao.db")

# SEAO URLs
SEAO_BASE_URL = "https://seao.gouv.qc.ca"
SEAO_LIST_URL = get_env("SEAO_LIST_URL", "")

# Date range for filtering
DTE_PUB_CC_FRM = get_env("DtePubCcFrm", "")
DTE_PUB_CC_TO = get_env("DtePubCcTo", "")

def get_date_range() -> tuple[str, str]:
    """Return the configured range or a fresh rolling 24-hour range."""
    if DTE_PUB_CC_FRM and DTE_PUB_CC_TO:
        return DTE_PUB_CC_FRM, DTE_PUB_CC_TO
    now = datetime.now(timezone.utc)
    return (
        (now - timedelta(hours=24)).strftime("%Y-%m-%dT%H:%M:%S.0000000Z"),
        now.strftime("%Y-%m-%dT%H:%M:%S.0000000Z"),
    )

# Browser settings
HEADLESS = get_env("HEADLESS", "true").lower() == "true"
REQUEST_DELAY = float(get_env("REQUEST_DELAY", "1.5"))
MAX_PAGES = int(get_env("MAX_PAGES", "0"))  # 0 = all pages
MAX_ITEMS = int(get_env("MAX_ITEMS", "0"))  # 0 = all contracts

# Remote MySQL Sync (via Laravel API)
MYSQL_API_URL = get_env("MYSQL_API_URL", "")
MYSQL_API_TOKEN = get_env("MYSQL_API_TOKEN", "")
SYNC_AFTER_SCRAPER = get_env("SYNC_AFTER_SCRAPER", "false").lower() == "true"
SYNC_ALL_FROM_SQLITE = get_env("SYNC_ALL_FROM_SQLITE", "true").lower() == "true"
REFRESH_ALL_DETAILS_BEFORE_SYNC = get_env("REFRESH_ALL_DETAILS_BEFORE_SYNC", "false").lower() == "true"

# Logging
LOG_LEVEL = getattr(logging, get_env("LOG_LEVEL", "INFO"), logging.INFO)

# Build the full list URL with dynamic date range
def build_list_url() -> str:
    """Build the full SEAO list URL with dynamic date parameters."""
    if not SEAO_LIST_URL:
        raise ValueError("SEAO_LIST_URL must be configured")
    url = SEAO_LIST_URL
    date_from, date_to = get_date_range()
    # Append date range params if URL doesn't already have them
    if "DtePubCcFrm=" not in url:
        separator = "&" if "?" in url else "?"
        url += f"{separator}DtePubCcFrm={date_from}&DtePubCcTo={date_to}"
    return url
