# typed: true
# frozen_string_literal: true

require "unpack_strategy"

module Cask
  class DSL
    # Class corresponding to the `container` stanza.
    #
    # @api private
    class Container
      VALID_KEYS = Set.new([
        :type,
        :nested,
      ]).freeze

      attr_accessor(*VALID_KEYS, :pairs)

      def initialize(pairs = {})
        @pairs = pairs
        pairs.each do |key, value|
          raise "invalid container key: #{key.inspect}" unless VALID_KEYS.include?(key)

          send(:"#{key}=", value)
        end

        return if type.nil?
        return unless UnpackStrategy.from_type(type).nil?

        raise "invalid container type: #{type.inspect}"
      end

      def to_yaml
        @pairs.to_yaml
      end

      def to_s
        @pairs.inspect
      end
    end
  end
end
