module WolfCore::Integrations::ContractApiOperations

def extract_ids_from_contract_id(contract_id)

def extract_ids_from_contract_id(contract_id)
  match = contract_id.match(CONTRACT_ID_REGEX)
  raise_service_error(message: "Invalid contract_id format", data: { contract_id: contract_id }) unless match
  order_id = match[1]
  jobseeker_id = match[2]
  [order_id, jobseeker_id]
end

def fetch_contract(wolf_token:, tenant:, wolf_platform_url:, contract_id:, query: nil)

def fetch_contract(wolf_token:, tenant:, wolf_platform_url:, contract_id:, query: nil)
  order_id, jobseeker_id = extract_ids_from_contract_id(contract_id)
  query ||= {}
  parsed_http_get(
    headers: { "Authorization" => "Bearer #{wolf_token}" },
    url: "#{wolf_platform_url}/api/v2/contracts/#{order_id}/#{jobseeker_id}",
    query: query.merge(tenant: tenant)
  )
end

def fetch_contract!(wolf_token:, tenant:, wolf_platform_url:, contract_id:, error_message:, error_data: nil, query: nil)

def fetch_contract!(wolf_token:, tenant:, wolf_platform_url:, contract_id:, error_message:, error_data: nil, query: nil)
  response = fetch_contract(
    wolf_token: wolf_token,
    tenant: tenant,
    wolf_platform_url: wolf_platform_url,
    contract_id: contract_id,
    query: query
  )
  order_id, jobseeker_id = extract_ids_from_contract_id(contract_id)
  error_data ||= {}
  validate_http_response(
    response: response,
    message: error_message,
    error_data: error_data.merge(contract_id: contract_id, order_id: order_id, jobseeker_id: jobseeker_id, query: query)
  )
  response.body.dig("data", "table", "contract")
end

def update_contract(wolf_token:, tenant:, wolf_platform_url:, contract_id:, contract:)

def update_contract(wolf_token:, tenant:, wolf_platform_url:, contract_id:, contract:)
  order_id, jobseeker_id = extract_ids_from_contract_id(contract_id)
  parsed_http_put(
    headers: { "Authorization" => "Bearer #{wolf_token}" },
    url: "#{wolf_platform_url}/api/v2/contracts/#{order_id}/#{jobseeker_id}",
    query: { tenant: tenant },
    body: contract
  )
end

def update_contract!(wolf_token:, tenant:, wolf_platform_url:, contract_id:, contract:, error_message:, error_data: nil)

def update_contract!(wolf_token:, tenant:, wolf_platform_url:, contract_id:, contract:, error_message:, error_data: nil)
  response = update_contract(
    wolf_token: wolf_token,
    tenant: tenant,
    wolf_platform_url: wolf_platform_url,
    contract_id: contract_id,
    contract: contract
  )
  order_id, jobseeker_id = extract_ids_from_contract_id(contract_id)
  error_data ||= {}
  validate_http_response(
    response: response,
    message: error_message,
    error_data: error_data.merge(contract_id: contract_id, order_id: order_id, jobseeker_id: jobseeker_id, contract: contract)
  )
  response
end