class Employee::Legacy::Classrooms::LessonPlansController < Employee::Controller
  include Employee::ClassroomScoped

  def index
    render_success :ok, json: lesson_plans.map { |p| lesson_plan_props(p) }
  end

  def show
    render_success :ok, json: lesson_plan_props(lesson_plan)
  end

  def create
    lesson_plan = lesson_plans.build(lesson_plan_params)
    if lesson_plan.save
      render_success :ok, json: lesson_plan_props(lesson_plan)
    else
      render_error :unprocessable_entity, errors: lesson_plan
    end
  end

  def update
    if lesson_plan.update(lesson_plan_params)
      render_success :ok, json: lesson_plan_props(lesson_plan)
    else
      render_error :unprocessable_entity, errors: lesson_plan
    end
  end

  private
    def lesson_plans
      classroom.class_lesson_plans
    end

    def lesson_plan
      @lesson_plan ||= lesson_plans.find_by(id: params[:id])
    end

    def lesson_plan_props(lesson_plan)
      {}.tap do |props|
        props[:id] = lesson_plan.id
        props[:date] = lesson_plan.date
        props[:name] = lesson_plan.name
        props[:unit_number] = lesson_plan.unit_number
        props[:subject_id] = lesson_plan.class_subject_id
        props[:subject] = lesson_plan.class_subject&.name
        props[:status] = lesson_plan.status?
        props[:objectives] = lesson_plan.objectives
        props[:resources] = lesson_plan.resources
        props[:procedures] = lesson_plan.procedures
        props[:evaluation] = lesson_plan.evaluation
        props[:notes] = lesson_plan.notes
        props[:homework] = lesson_plan.homework
      end
    end

    def lesson_plan_params
      params.require(:lesson_plan)
        .permit(ClassLessonPlan::PARAMETERS)
        .merge(class_subject_hash)
    end

    def class_subject_hash
      return {} if params[:subject_id].blank?

      subject = classroom.class_subjects.find_by(id: params[:subject_id])
      { class_subject: subject }
    end
end
