"""Australian harness racing client.

Provides data ingestion from Australian harness racing sources
(e.g., HarnessWeb, AU TAB API equivalents) for expanding coverage
beyond New Zealand racing.
"""

from __future__ import annotations

from typing import Any


class AustralianHarnessClient:
    """Client for Australian harness racing data.

    Ingests meetings, races, and results from Australian sources
    and normalizes them into the TipSharks data model.
    """

    def __init__(
        self,
        base_url: str = "https://api.harness.org.au/v1",
        timeout: float = 30.0,
    ) -> None:
        """Initialize the Australian harness client.

        Args:
            base_url: API base URL for the Australian harness data source.
            timeout: Request timeout in seconds.
        """
        self.base_url = base_url.rstrip("/")
        self.timeout = timeout

    async def get_meetings(
        self,
        date_from: str | None = None,
        date_to: str | None = None,
    ) -> list[dict[str, Any]]:
        """Fetch meetings from Australian harness API.

        Args:
            date_from: Start date (YYYY-MM-DD). Defaults to today.
            date_to: End date (YYYY-MM-DD). Defaults to today.

        Returns:
            List of meeting dicts normalized to TipSharks format.
        """
        raise NotImplementedError

    async def get_race_results(
        self,
        meeting_id: str,
    ) -> list[dict[str, Any]]:
        """Fetch race results for an Australian meeting.

        Args:
            meeting_id: Meeting identifier from the source API.

        Returns:
            List of race dicts with runner results.
        """
        raise NotImplementedError

    async def get_runner_details(
        self,
        runner_id: str,
    ) -> dict[str, Any]:
        """Fetch detailed runner/horse information.

        Args:
            runner_id: Runner/horse identifier.

        Returns:
            Runner detail dict.
        """
        raise NotImplementedError

    def normalize_meeting(
        self,
        raw_meeting: dict[str, Any],
    ) -> dict[str, Any]:
        """Normalize an Australian API meeting into TipSharks format.

        Args:
            raw_meeting: Raw meeting data from the Australian API.

        Returns:
            Normalized meeting dict compatible with MeetingRepository.
        """
        raise NotImplementedError

    def normalize_runner(
        self,
        raw_runner: dict[str, Any],
    ) -> dict[str, Any]:
        """Normalize an Australian API runner into TipSharks format.

        Args:
            raw_runner: Raw runner data from the Australian API.

        Returns:
            Normalized runner dict compatible with StarterRepository.
        """
        raise NotImplementedError
