module JiraBox
  module Fields
    class Multicheckboxes < Base

      attr_accessor :custom_id, :set_values, :checkbox_values

      validates :custom_id, :set_values, :checkbox_values, presence: true
      validate :ensure_values_are_valid

      def set(values)
        values = [values] unless values.is_a?(Array)
        self.set_values = values
      end

      def to_hash
        h = {}
        return h unless set_values.present?
        h[key] = set_values
        h
      end

      def to_input_hash
        {
          display_name: display_name,
          key: key,
          type: :array,
          type_def: { id: :string },
          values: checkbox_values,
          required: is_required
        }
      end

      def ensure_values_are_valid
        return unless set_values.present? && checkbox_values.present?

        unless set_values.is_a?(Array)
          self.errors.add(:set_values, :invalid) and return false
        end

        unless checkbox_values.is_a?(Array)
          self.errors.add(:checkbox_values, :invalid) and return false
        end

        set_values.each do |v|
          unless checkbox_values.include?(v)
            self.errors.add(:values, :invalid) and return false
          end
        end
      end

    end
  end
end
