/** 🌍 위치 정보 */
export interface Location {
  latitude: number
  longitude: number
}

/** 🌡️ 기온 정보 */
export interface Temperature {
  current: number // 현재 기온
  unit: '°C' | '°F'
}

/** 💨 바람 정보 */
export interface Wind {
  speed: number // 풍속
  unit: 'm/s' | 'km/h' | 'mph'
  direction: number | null // 풍향 (0~360도, 0=북쪽), 일부 API에서 제공되지 않을 수 있음
}

/** 🌤️ 날씨 공통 데이터 모델 */
export interface WeatherData {
  location: Location
  temperature: Temperature
  wind: Wind
  humidity: number // 상대 습도 (%)
  cloudCoverage: number // 구름량 (%)
  solarRadiation: number | null // 태양광량 (W/m²), 일부 API에서 제공되지 않음
  weatherDescription: string // 날씨 상태 (예: "clear", "partly cloudy")
  timestamp: string // 데이터 수집 시간 (ISO8601)
}

/** 🌍 특정 위치의 주변 날씨 데이터 (여러 개의 WeatherData 포함) */
export interface WeatherAround {
  center: Location // 중심 좌표
  radius: number // 반경 (km)
  weatherPoints: WeatherData[] // 반경 내의 날씨 데이터 리스트
}

export type WeatherType = 'temperature' | 'humidity' | 'wind' | 'precipitation'

export interface WeatherService {
  /**
   * 특정 위치의 날씨 데이터를 가져온다.
   * @param location - 조회할 위치 (위도, 경도)
   * @returns WeatherData - 표준화된 날씨 데이터
   */
  getWeatherByLocation(location: Location): Promise<WeatherData>

  /**
   * 특정 위치를 중심으로 주변 반경 내의 날씨 데이터를 가져온다.
   * @param location - 중심 위치 (위도, 경도)
   * @param radius - 검색할 반경 (단위: km)
   * @returns WeatherAround - 주변의 날씨 데이터 리스트
   */
  getWeatherAroundLocation(location: Location, radius: number): Promise<WeatherAround>

  /**
   * 전 세계 날씨 데이터를 가져온다.
   * @param gridResolution - 격자 크기 (단위: km)
   * @returns WeatherAround[] - 전 세계의 날씨 데이터 리스트
   */
  getGlobalWeatherData(gridResolution: number): Promise<WeatherAround[]>
}
