class Admin::Legacy::HumanResources::Employees::AddressesController <
  Admin::Legacy::HumanResources::Controller
  def index
    employee.sync_legacy_addresses
    render_success :ok, json: addresses.map { |a| address_props(a) }
  end

  def show
    render_success :ok, json: address_props(address)
  end

  def create
    address = addresses.build(address_params)

    if address.save
      render_success :ok, json: address_props(address)
    else
      render_error :unprocessable_entity, errors: address
    end
  end

  def update
    if address.update(address_params)
      render_success :ok, json: address_props(address)
    else
      render_error :unprocessable_entity, errors: address
    end
  end

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

  def available
    render_success :ok, json: employee.available_addresses(params[:types] || [])
  end

  private
    def permissions
      if [:index, :show, :available].include?(action_name.to_sym)
        ['read', 'write', 'manage']
      else
        ['write', 'manage']
      end
    end

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

    def addresses
      employee.addresses
    end

    def address
      @address ||= addresses.find_by(id: params[:id])
    end

    def address_params
      params.permit(:street, :street_ext, :city, :state, :zip, :code)
    end

    def address_props(address)
      {
        id: address.id,
        code: address.code,
        street: address.street,
        street_ext: address.street_ext,
        city: address.city,
        state: address.state,
        zip: address.zip,
        full_name: employee.full_name
      }
    end
end
