/** * Rates API * * Endpoints for searching shipping rates (both API and CSV-based) */ import { get, post } from './client'; import type { RateSearchRequest, RateSearchResponse, CsvRateSearchRequest, CsvRateSearchResponse, AvailableCompaniesResponse, FilterOptionsResponse, } from '@/types/api'; /** * Route Port Info - port details with coordinates */ export interface RoutePortInfo { code: string; name: string; city: string; country: string; countryName: string; displayName: string; latitude?: number; longitude?: number; } /** * Available Origins Response */ export interface AvailableOriginsResponse { origins: RoutePortInfo[]; total: number; } /** * Available Destinations Response */ export interface AvailableDestinationsResponse { origin: string; destinations: RoutePortInfo[]; total: number; } /** * Search shipping rates (API-based) * POST /api/v1/rates/search */ export async function searchRates(data: RateSearchRequest): Promise { return post('/api/v1/rates/search', data); } /** * Search CSV-based rates with detailed pricing * POST /api/v1/rates/search-csv */ export async function searchCsvRates(data: CsvRateSearchRequest): Promise { return post('/api/v1/rates/search-csv', data); } /** * Search CSV-based rates with service level offers (RAPID, STANDARD, ECONOMIC) * POST /api/v1/rates/search-csv-offers * * Generates 3 offers per matching rate: * - RAPID: +20% price, -30% transit (most expensive, fastest) * - STANDARD: base price and transit * - ECONOMIC: -15% price, +50% transit (cheapest, slowest) */ export async function searchCsvRatesWithOffers(data: CsvRateSearchRequest): Promise { return post('/api/v1/rates/search-csv-offers', data); } /** * Get available companies for filtering * GET /api/v1/rates/companies */ export async function getAvailableCompanies(): Promise { return post('/api/v1/rates/companies'); } /** * Get filter options (companies, container types, currencies) * GET /api/v1/rates/filters/options */ export async function getFilterOptions(): Promise { return post('/api/v1/rates/filters/options'); } /** * Get available origin ports from CSV rates * GET /api/v1/rates/available-routes/origins * * Returns only ports that have shipping routes defined in CSV rate files. * Use this to populate origin port selection dropdown. */ export async function getAvailableOrigins(): Promise { return get('/api/v1/rates/available-routes/origins'); } /** * Get available destination ports for a given origin * GET /api/v1/rates/available-routes/destinations?origin=XXXX * * Returns only ports that have shipping routes from the specified origin port. * Use this to populate destination port selection after origin is selected. */ export async function getAvailableDestinations( origin: string ): Promise { return get( `/api/v1/rates/available-routes/destinations?origin=${encodeURIComponent(origin)}` ); }