"""
Rangefinder-koordinater (migrasjon 065/079) -- avstand til green/hindringer,
GPS-basert. Delt mellom rounds.py (frittstående runder), individual_
tournaments.py (org-turnering, individuell slagspill) og scoring.py
(org-turnering, lag-matchplay) -- alle tre løser sin egen kontekst om til
samme `CourseKey` (se hole_history.py, som denne modulen gjenbruker banen-
bro-abstraksjonen fra) og kaller `get_target_points()` her.

To kildetabeller, ingen RLS på noen av dem (globale, delt på tvers av
organisasjoner/brukere som tilfeldigvis bruker samme fysiske bane -- samme
begrunnelse som golfapi_course_coordinate alltid har hatt): `golfapi_
course_coordinate` (GolfAPI-importerte baner) og `teeoff_course_coordinate`
(ekte teeoff-baner, migrasjon 079). Fordi ingen av dem er RLS-beskyttet,
virker `get_target_points()` uendret uansett om `conn` kommer fra
`plain_connection()` eller `org_connection()`.
"""

from __future__ import annotations

from asyncpg import Connection
from pydantic import BaseModel

from .hole_history import CourseKey


class TargetPoint(BaseModel):
    poi_type: str
    location: str | None
    side_fairway: str | None
    latitude: float
    longitude: float
    hazard_group: str | None


async def get_target_points(conn: Connection, course_key: CourseKey | None, hole_number: int) -> list[TargetPoint]:
    if course_key is None:
        return []
    kind = course_key[0]
    if kind == "teeoff":
        _, facility_slug, teeoff_course_id = course_key
        rows = await conn.fetch(
            """
            SELECT poi_type, location, side_fairway, latitude, longitude, hazard_group
            FROM teeoff_course_coordinate
            WHERE external_course_ref = $1 AND hole_number = $2
            """,
            f"{facility_slug}:{teeoff_course_id}",
            hole_number,
        )
    else:
        _, golfapi_course_id = course_key
        rows = await conn.fetch(
            """
            SELECT poi_type, location, side_fairway, latitude, longitude, hazard_group
            FROM golfapi_course_coordinate
            WHERE golfapi_course_id = $1 AND hole_number = $2
            """,
            golfapi_course_id,
            hole_number,
        )
    return [TargetPoint(**dict(r)) for r in rows]
