lib/wolf_core/application/integrations/client_api_operations.rb



module WolfCore
  module Integrations
    module ClientApiOperations
      include WolfCore::HttpOperations
      include WolfCore::Integrations::CustomValueApiOperations

      def fetch_client!(wolf_token:, client_id:, tenant:, wolf_platform_url:, error_message:)
        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
        )
        response_body = response.body
        response_body.dig("data", "table", "company")
      end

      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 create_client!(wolf_token:, client:, tenant:, wolf_platform_url:, error_message:)
        safe_http_post(
          headers: { "Authorization" => "Bearer #{wolf_token}" },
          query: { tenant: tenant },
          url: "#{wolf_platform_url}/api/v2/companies",
          body: client,
          error_message: error_message
        )
      end

      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 update_client!(wolf_token:, client:, tenant:, wolf_platform_url:, error_message:, client_id:)
        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
        )
      end

      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 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
    end
  end
end