import type {
  TelematicsProduct,
  TelematicsCatalogStats,
  CreateTelematicsProductPayload,
  UpdateTelematicsProductPayload,
} from "@/domain/entities/telematics-product";
import type { TelematicsCatalogRepository } from "@/domain/repositories/telematics-catalog.repository";
import type { BackendPaginatedData, PaginationQueryParams } from "@/shared/types";
import { api } from "@/infrastructure/api/api-client";

const BASE = "/telematics-catalog";

export class TelematicsCatalogRepositoryImpl implements TelematicsCatalogRepository {
  findAll(params: PaginationQueryParams) {
    return api.get<BackendPaginatedData<TelematicsProduct>>(`${BASE}/products`, {
      params,
    });
  }

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

  create(data: CreateTelematicsProductPayload) {
    return api.post<TelematicsProduct>(`${BASE}/products`, data);
  }

  update(id: number, data: UpdateTelematicsProductPayload) {
    return api.put<TelematicsProduct>(`${BASE}/products/${id}`, data);
  }

  delete(id: number) {
    return api.delete(`${BASE}/products/${id}`);
  }

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

  getNeedsSuggestions() {
    return api.get<string[]>(`${BASE}/needs-suggestions`);
  }
}
