class Support::Training::Pathwright::CoursesController < Support::Training::Controller
  include CacheHelper

  def index
    data = load_cache("pathwright/courses/#{params[:category_id]}") do
      courses.by_categories(params[:category_id]).map { |c| course_props(c) }.to_json
    end
    render_success :ok, json: data
  end

  def show
    render_success :ok, json: course_props(course)
  end

  def create
    course = category.courses.build(course_params)
    if course.save
      render_success :ok, json: course_props(course)
    else
      render_error :unprocessable_entity, errors: course
    end
  end

  def update
    course.category = category
    if course.update(course_params)
      render_success :ok, json: course_props(course)
    else
      render_error :unprocessable_entity, errors: course
    end
  end

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

  private
    def category
      @category ||= Pathwright::Category.find_by(id: params[:category_id])
    end

    def courses
      Pathwright::Course.all
    end

    def course
      @course ||= courses.find_by(id: params[:id])
    end

    def course_params
      params.permit(:name, :description)
    end

    def course_props(course)
      {
        id: course.id,
        name: course.name,
        description: course.description,
        category_id: course.category_id
      }
    end
end
