require_relative '../icon'
require_relative '../icon_toggle'


module Voom
  module Presenters
    module DSL
      module Components
        module Lists
          class Action < Base
            attr_accessor :action_type

            def initialize(**attribs_, &block)
              super(type: :action, **attribs_, &block)
              expand!
            end

            def icon(icon=nil, **attribs, &block)
              return @icon if locked?
              @action_type = :icon
              @icon = Icon.new(parent: self, icon: icon,
                               context: context,
                               **attribs, &block)
            end


            def menu(**attribs, &block)
              return @menu if locked?
              @action_type = :menu
              @menu = Menu.new(parent: self, context: context,
                               **attribs, &block)
            end

            def checkbox(**attribs, &block)
              return @checkbox if locked?
              @action_type = :checkbox
              @checkbox = Checkbox.new(parent: self, context: context,
                                       **attribs, &block)
            end

            def radio_button(**attribs, &block)
              return @radio_button if locked?
              @action_type = :radio_button
              @radio_button = RadioButton.new(parent: self, context: context,
                                              **attribs, &block)
            end

            def switch(**attribs, &block)
              return @switch if locked?
              @action_type = :switch
              @switch = Switch.new(parent: self, context: context,
                                   **attribs, &block)
            end

            def icon_toggle(icon=nil, **attribs, &block)
              return @icon_toggle if locked?
              @action_type = :icon_toggle
              @icon_toggle = IconToggle.new(parent: self, icon: icon, context: context, **attribs, &block)
            end

            def button(text=nil, **attribs, &block)
              return @button if locked?
              @action_type = :button
              @button = Components::Button.new(text: text, parent: self, context: context, **attribs, &block)
            end
          end
        end
      end
    end
  end
end