class Admin::Legacy::HumanResources::Employees::PositionsController <
  Admin::Legacy::HumanResources::Controller
  def index
    render_success :ok, json: positions.order(start_date: :desc).map { |p| position_props(p) }
  end

  def show
    render_success :ok, json: position_props(position)
  end

  def create
    position = positions.build(position_params)
    if position.save
      render_success :ok, json: position_props(position)
    else
      render_error :unprocessable_entity, errors: position
    end
  end

  def update
    if position.update(position_params)
      render_success :ok, json: position_props(position)
    else
      render_error :unprocessable_entity, errors: position
    end
  end

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

  def delete_employee
    resp = EdFi::Indiana::Sandbox::StaffDeleteService
      .call(current_school_year.id, { employee_id: employee.id })
    if resp
      render_success :ok
    else
      render_error :unprocessable_entity, errors: position
    end
  end

  private
    def employee
      @employee ||= current_school.employees.find_by(id: params[:employee_id])
    end

    def positions
      employee.positions.includes(:position)
    end

    def position
      @position ||= positions.find_by(id: params[:id])
    end

    def position_params
      params.permit(:start_date, :end_date, :position_id, :employment_descriptor)
    end

    def position_props(position)
      ed_fi_id = if position.ed_fi_id
        position.ed_fi_id.school_year == current_school_year
      else
        false
      end

      {
        id: position.id,
        position_id: position.position_id,
        start_date: position.start_date,
        end_date: position.end_date,
        name: position.decorate.name,
        employment_descriptor: position.employment_descriptor,
        full_name: employee.full_name,
        edfi_id: ed_fi_id
      }
    end
end
