/** FEAT-13: Abgabeverträge (/contracts). */
import { API_BASE_URL, api, resources } from './client'
import { toQueryString, type GridifyQuery } from './gridify'
import type { DateOnlyString, Paged } from './types'

export interface SaleContract {
  id: string
  contactId: string
  price: number
  handoverDate: DateOnlyString
  contractDate: DateOnlyString
  fileName: string
  createdAt: string
  gerbilIds: string[]
  /** API-relativer Download-Pfad ("/contracts/{id}/file"). */
  url: string
}

export interface CreateSaleContract {
  contactId: string
  gerbilIds: string[]
  price: number
  handoverDate: DateOnlyString
  contractDate?: DateOnlyString | null
}

export function listContracts(query: GridifyQuery): Promise<Paged<SaleContract>> {
  return api.get<Paged<SaleContract>>(`${resources.contracts}${toQueryString(query)}`)
}

export function createContract(body: CreateSaleContract): Promise<SaleContract> {
  return api.post<SaleContract>(resources.contracts, body)
}

export function deleteContract(id: string): Promise<void> {
  return api.delete(`${resources.contracts}/${id}`)
}

/** Absolute Download-URL der .docx (für <a href> / window.open). */
export function contractFileUrl(contract: Pick<SaleContract, 'url'>): string {
  return `${API_BASE_URL}${contract.url}`
}
