class Admin::TimeCard::CyclesController < Admin::Controller
  def index
    render_success :ok, json: cycles.map { |c| cycle_props(c) }
  end

  def show
    render_success :ok, json: cycle_props(cycle)
  end

  def create
    cycle = cycles.build(cycle_params)

    if cycle.save
      render_success :ok, json: cycle_props(cycle)
    else
      render_error :unprocessable_entity, errors: cycle
    end
  end

  def update
    if cycle.update(cycle_params)
      render_success :ok, json: cycle_props(cycle)
    else
      render_error :unprocessable_entity, errors: cycle
    end
  end

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

  private
    def cycles
      current_school.time_card_cycles
    end

    def cycle
      @cycle ||= cycles.find_by(id: params[:id])
    end

    def cycle_params
      params.permit(:name, :start, :stop, :open)
    end

    def cycle_props(cycle)
      {
        id: cycle.id,
        name: cycle.name,
        start: cycle.start,
        stop: cycle.stop,
        open: cycle.open,
        days: (cycle.start..cycle.stop).count
      }
    end
end
