class Admin::Legacy::Nursing::VaccinesController < Admin::Legacy::Nursing::Controller
  def index
    render_success :ok, json: vaccine_props
  end

  def create
    vaccine_config = vaccine_configs.build(vaccine_config_params)

    if vaccine_config.save
      render_success :ok
    else
      render_error :unprocessable_entity, errors: vaccine_config
    end
  end

  def update
    if vaccine_config.update(vaccine_config_params)
      render_success :ok
    else
      render_error :unprocessable_entity, errors: vaccine_config
    end
  end

  def destroy
    if vaccine_config.destroy
      render_success :ok
    else
      render_error :unprocessable_entity, errors: vaccine_config
    end
  end

  private
    def vaccines
      Nursing::Vaccine.all
    end

    def vaccine_configs
      current_school.nursing_vaccine_configs
    end

    def vaccine_config
      @vaccine_config ||= vaccine_configs.find_by(id: params[:id])
    end

    def vaccine_config_params
      params.permit(:vaccine_id, :grade)
    end

    def vaccine_props
      vaccine_items = vaccine_configs.to_a
      vaccines.map do |vaccine|
        config = vaccine_items.find { |v| v.vaccine_id == vaccine.id }
        data = {
          vaccine_id: vaccine.id,
          name: vaccine.name,
          description: vaccine.description
        }

        data.merge!(config_props(config)) if config
        data
      end
    end

    def config_props(config)
      {
        id: config.id,
        grade: config.grade == 99 ? nil : config.grade
      }
    end
end
