"use server"

import { sdk } from "@lib/config"
import {
  RajaOngkirProvince,
  RajaOngkirCity,
  RajaOngkirDistrict,
  RajaOngkirSubdistrict,
} from "./rajaongkir-constants"

type ListResponse<T> = {
  meta: { status: string; code: number; message: string }
  data: T[]
}

export async function getProvinces(): Promise<RajaOngkirProvince[]> {
  try {
    const response = await sdk.client.fetch<ListResponse<RajaOngkirProvince>>(
      `/store/rajaongkir/provinces`,
      { method: "GET" }
    )
    return response.data || []
  } catch {
    return []
  }
}

export async function getCitiesByProvinceId(
  provinceId: number
): Promise<RajaOngkirCity[]> {
  try {
    const response = await sdk.client.fetch<ListResponse<RajaOngkirCity>>(
      `/store/rajaongkir/cities/${provinceId}`,
      { method: "GET" }
    )
    return response.data || []
  } catch {
    return []
  }
}

export async function getDistrictsByCityId(
  cityId: number
): Promise<RajaOngkirDistrict[]> {
  try {
    const response = await sdk.client.fetch<ListResponse<RajaOngkirDistrict>>(
      `/store/rajaongkir/districts/${cityId}`,
      { method: "GET" }
    )
    return response.data || []
  } catch {
    return []
  }
}

export async function getSubdistrictsByDistrictId(
  districtId: number
): Promise<RajaOngkirSubdistrict[]> {
  try {
    const response = await sdk.client.fetch<ListResponse<RajaOngkirSubdistrict>>(
      `/store/rajaongkir/subdistricts/${districtId}`,
      { method: "GET" }
    )
    return response.data || []
  } catch {
    return []
  }
}
