class EmployerSetupForm
  include ActiveModel::Model
  include ActiveModel::Attributes

  FIRST_STEP = "general_information"

  attribute :current_step, :string, default: FIRST_STEP
  attribute :pl_plan_key, :string
  attribute :employer_setup_process_id, :integer

  def initialize(params = {})
    # if params.present?
    #   params = permitted_params(params)
    # end
    # @current_step = params["current_step"]
    # @employer_setup_process_id = params["employer_setup_process_id"]
    super(params)

    unless self.steps.first == FIRST_STEP
        raise StepMisalignmentError, "FIRST_STEP does not match first entry in steps"
    end
    # @general_information_data = EmployerSetupGeneralInformationForm.new(attributes[:general_information_data])
    # @plans_data = EmployerSetupPlansForm.new(attributes[:plans_data])
    # @network_exceptions_data = EmployerSetupNetworkExceptionsForm.new(attributes[:network_exceptions_data])
  end

  # def self.form_session_init
  #   {
  #     general_information_data: {},
  #     plans_data: {},
  #     network_exceptions_data: {}
  #   }
  # end

  # def steps
  #   %w[general_information plans network_exceptions summary]
  # end

  def steps
    %w[general_information plans network_exceptions summary]
  end

  def current_step_view
    "employer_setup/#{self.current_step}"
  end

  def next_step
    index = steps.index(current_step)
    if index && index < steps.length - 1
      steps[index + 1]
    end
  end

  def previous_step
    index = steps.index(current_step)
    steps[index - 1] if index && index > 0
  end

  def permitted_params(params)
    params.permit(
      :pl_plan_key,
      :current_step
    )
  end

  def self.permitted_params
    [
      :pl_plan_key,
      :current_step
    ]
  end

  def save
    if valid?
      process = EmployerSetupProcess.find(@employer_setup_process_id)
      process.update(
        status: "entered"
      )
        true
    else
      false
    end
  end

end