import { UseCase } from "@/core/domain/use-case";
import { Either, left, right } from "@/core/logic/either";
import { ApiClientProvider } from "@/providers/api-client-provider";
import { InferenceRegion } from "../../domain/inference-region";
import { ListInferenceRegionsError } from "./errors/list-inference-regions-error";

export class ListInferenceRegions
  implements UseCase<void, InferenceRegion[], ListInferenceRegionsError>
{
  constructor(private readonly apiClient: ApiClientProvider) {}

  async execute(): Promise<
    Either<ListInferenceRegionsError, InferenceRegion[]>
  > {
    try {
      const regions = await this.apiClient.get<InferenceRegion[]>(
        "/ai-inference/regions"
      );

      if (!regions) {
        return left(
          new ListInferenceRegionsError("Failed to list inference regions")
        );
      }

      return right(regions);
    } catch (error) {
      return left(
        new ListInferenceRegionsError(
          error instanceof Error ? error.message : "Unexpected error occurred."
        )
      );
    }
  }
}
