# frozen_string_literal: true

module Api
  module Admin
    class CustomerSerializer < ActiveModel::Serializer
      attributes :id, :email, :enterprise_id, :user_id, :code, :tags, :tag_list, :first_name,
                 :last_name, :allow_charges, :default_card_present?

      has_one :ship_address, serializer: Api::AddressSerializer
      has_one :bill_address, serializer: Api::AddressSerializer

      def full_name
        object.full_name.presence || object.bill_address&.full_name
      end

      def tag_list
        customer_tag_list.join(",")
      end

      def tags
        customer_tag_list.map do |tag|
          tag_rule_map = options.dig(:tag_rule_mapping, tag)
          tag_rule_map || { text: tag, rules: nil }
        end
      end

      def default_card_present?
        return false unless object.user

        object.user.default_card.present?
      end

      private

      def customer_tag_list
        return object.tag_list unless options[:customer_tags]

        options.dig(:customer_tags, object.id) || []
      end
    end
  end
end
