class Admin::TimeCard::EntriesController < Admin::Controller
  include DateRangeHelper

  def index
    data = entries.by_date_range(date_range(params[:dates])).by_employee(params[:employee_id])
    render_success :ok, json: data.map { |c| entry_props(c) }
  end

  def show
    render_success :ok, json: entry_props(entry)
  end

  def create
    entry = entry.build(entry_params)

    if entry.save
      render_success :ok, json: entry_props(entry)
    else
      render_error :unprocessable_entity, errors: entry
    end
  end

  def update
    if entry.update(entry_params)
      render_success :ok, json: entry_props(entry)
    else
      render_error :unprocessable_entity, errors: entry
    end
  end

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

  private
    def entries
      current_school.time_card_entries
    end

    def entry
      @entry ||= entries.find_by(id: params[:id])
    end

    def entry_params
      params.permit(:class_id, :user_id, :task_id, :date, :start_time, :stop_time, :hours, :minutes)
    end

    def entry_props(entry)
      {
        id: entry.id,
        class_id: entry.class_id? ? entry.class_id : nil,
        class_name: entry.classroom&.name,
        employee_id: entry.employee_id,
        employee_name: entry.employee.full_name(:reverse),
        task_id: entry.task_id? ? entry.task_id : nil,
        task_name: entry.task&.name,
        date: entry.date,
        start_time: entry.decorate.start_time,
        stop_time: entry.decorate.stop_time,
        hours: entry.hours,
        minutes: entry.minutes,
        time: entry.decorate.time
      }
    end
end
