module WolfCore::Integrations::ClientApiOperations

def create_client(wolf_token:, client:, tenant:, wolf_platform_url:)

def create_client(wolf_token:, client:, tenant:, wolf_platform_url:)
  parsed_http_post(
    headers: { "Authorization" => "Bearer #{wolf_token}" },
    query: { tenant: tenant },
    url: "#{wolf_platform_url}/api/v2/companies",
    body: client
  )
end

def create_client!(wolf_token:, client:, tenant:, wolf_platform_url:, error_message:, error_data: nil)

def create_client!(wolf_token:, client:, tenant:, wolf_platform_url:, error_message:, error_data: nil)
  error_data ||= {}
  safe_http_post(
    headers: { "Authorization" => "Bearer #{wolf_token}" },
    query: { tenant: tenant },
    url: "#{wolf_platform_url}/api/v2/companies",
    body: client,
    error_message: error_message,
    error_data: { client: client }.merge(error_data)
  )
end

def fetch_client(wolf_token:, client_id:, tenant:, wolf_platform_url:)

def fetch_client(wolf_token:, client_id:, tenant:, wolf_platform_url:)
  parsed_http_get(
    headers: { "Authorization" => "Bearer #{wolf_token}" },
    url: "#{wolf_platform_url}/api/v2/companies/#{client_id}",
    query: { tenant: tenant }
  )
end

def fetch_client!(wolf_token:, client_id:, tenant:, wolf_platform_url:, error_message:, error_data: nil)

def fetch_client!(wolf_token:, client_id:, tenant:, wolf_platform_url:, error_message:, error_data: nil)
  error_data ||= {}
  response = safe_http_get(
    headers: { "Authorization" => "Bearer #{wolf_token}" },
    url: "#{wolf_platform_url}/api/v2/companies/#{client_id}",
    query: { tenant: tenant },
    error_message: error_message,
    error_data: { client_id: client_id }.merge(error_data)
  )
  response_body = response.body
  response_body.dig("data", "table", "company")
end

def fetch_client_custom_value!(wolf_token:, tenant:, wolf_platform_url:, client_id:, id: nil, custom_requirement_id: nil, query: nil, error_data: nil)

def fetch_client_custom_value!(wolf_token:, tenant:, wolf_platform_url:, client_id:, id: nil, custom_requirement_id: nil, query: nil, error_data: nil)
  id || custom_requirement_id || raise_service_error({ message: "custom_requirement_id or id must be provided" })
  query = {
    user_category: 'Company',
    user_code: client_id,
    id: id,
    custom_requirement_friendly_id: custom_requirement_id
  }.compact.merge(query || {})
  fetch_custom_values!(
    wolf_token: wolf_token,
    tenant: tenant,
    wolf_platform_url: wolf_platform_url,
    error_message: "Unable to fetch custom values for #{client_id}",
    error_data: query.merge(error_data || {}),
    query: query
  ).first
end

def update_client(wolf_token:, client:, tenant:, wolf_platform_url:, client_id:)

def update_client(wolf_token:, client:, tenant:, wolf_platform_url:, client_id:)
  parsed_http_put(
    headers: { "Authorization" => "Bearer #{wolf_token}" },
    query: { tenant: tenant },
    url: "#{wolf_platform_url}/api/v2/companies/#{client_id}",
    body: client
  )
end

def update_client!(wolf_token:, client:, tenant:, wolf_platform_url:, error_message:, client_id:, error_data: nil)

def update_client!(wolf_token:, client:, tenant:, wolf_platform_url:, error_message:, client_id:, error_data: nil)
  error_data ||= {}
  safe_http_put(
    headers: { "Authorization" => "Bearer #{wolf_token}" },
    query: { tenant: tenant },
    url: "#{wolf_platform_url}/api/v2/companies/#{client_id}",
    body: client,
    error_message: error_message,
    error_data: { client_id: client_id, client: client }.merge(error_data)
  )
end