import type {
  Installer,
  InstallerProfile,
  CreateInstallerPayload,
  UpdateInstallerPayload,
  UpdateInstallerPasswordPayload,
} from "@/domain/entities/installer";
import type { InstallerRepository } from "@/domain/repositories/installer.repository";
import { api } from "@/infrastructure/api/api-client";

export class InstallerRepositoryImpl implements InstallerRepository {
  findAll(archived = false) {
    return api.get<Installer[]>("/installers", {
      params: archived ? { archived: 1 } : undefined,
    });
  }

  create(payload: CreateInstallerPayload) {
    return api.post<InstallerProfile>("/installers", payload);
  }

  update(id: number, payload: UpdateInstallerPayload) {
    return api.put<InstallerProfile>(`/installers/${id}`, payload);
  }

  updatePassword(id: number, payload: UpdateInstallerPasswordPayload) {
    return api.put<InstallerProfile>(`/installers/${id}/password`, payload);
  }

  remove(id: number) {
    return api.delete(`/installers/${id}`);
  }

  restore(id: number) {
    return api.post<InstallerProfile>(`/installers/${id}/restore`);
  }

  forceRemove(id: number) {
    return api.delete(`/installers/${id}/force`);
  }
}
