import type {
  Installation,
  InstallationDetail,
  InstallationEditOptions,
  InstallationStats,
  InstallerOption,
  UpdateInstallationPayload,
} from "@/domain/entities/installation";
import type { InstallationRepository } from "@/domain/repositories/installation.repository";
import type { BackendPaginatedData, PaginationQueryParams } from "@/shared/types";
import { api } from "@/infrastructure/api/api-client";

const BASE = "/installations";

export class InstallationRepositoryImpl implements InstallationRepository {
  findAll(params: PaginationQueryParams) {
    return api.get<BackendPaginatedData<Installation>>(BASE, { params });
  }

  findById(id: number) {
    return api.get<InstallationDetail>(`${BASE}/${id}`);
  }

  getStats() {
    return api.get<InstallationStats>(`${BASE}/stats`);
  }

  getInstallerOptions() {
    return api.get<InstallerOption[]>(`${BASE}/options/installers`);
  }

  getEditOptions() {
    return api.get<InstallationEditOptions>(`${BASE}/options/references`);
  }

  update(id: number, payload: UpdateInstallationPayload) {
    return api.patch<InstallationDetail>(`${BASE}/${id}`, payload);
  }

  validate(id: number) {
    return api.post<InstallationDetail>(`${BASE}/${id}/validate`);
  }
}
