class Admin::StateReporting::ConfigsController < Admin::StateReporting::Controller
  def index
    render_success :ok, json: configs.includes(:school_year).map { |c| config_props(c) }
  end

  def show
    render_success :ok, json: config_props(conf)
  end

  def update
    if conf.update(config_params)
      render_success :ok, json: config_props(conf)
    else
      render_error :unprocessable_entity, errors: conf
    end
  end

  def create
    config = configs.build(config_params)
    if config.save
      render_success :ok
    else
      render_error :unprocessable_entity, errors: config
    end
  end

  private
    def configs
      current_school.state_reporting_configs
    end

    def conf
      @conf ||= configs.find_by(school_year_id: params[:id])
    end

    def associations
      {}.tap do |props|
        props[:school_year] = current_school.school_years.find_by(id: params[:school_year_id])
        props[:calendar_descriptor] = EdFi::Descriptor.find_by(id: params[:calendar_descriptor_id])
      end
    end

    def config_params
      params.permit(
        :enabled,
        :syncing,
        :performance,
        :skip_calendar_validation
      ).merge(associations)
    end

    def config_props(config)
      {
        id: config.id,
        school_year_id: config.school_year_id,
        school_year_name: config.decorate.school_year_name,
        calendar_descriptor_id: config.calendar_descriptor_id,
        calendar_descriptor_name: config.decorate.calendar_descriptor_name,
        syncing: config.syncing,
        enabled: config.enabled,
        performance: config.performance
      }
    end
end
