// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

library shelf_packages_handler.dir_handler;

import 'dart:async';

import 'package:path/path.dart' as p;
import 'package:shelf/shelf.dart';

/// A utility handler that mounts a sub-handler beneath a directory name,
/// wherever that directory name appears in a URL.
///
/// In practice, this is used to mount a [PackagesHandler] underneath
/// `packages/` directories.
class DirHandler {
  /// The directory name to look for.
  final String _name;

  /// The inner handler to mount.
  final Handler _inner;

  DirHandler(this._name, this._inner);

  /// The callback for handling a single request.
  FutureOr<Response> call(Request request) {
    var segments = request.url.pathSegments;
    for (var i = 0; i < segments.length; i++) {
      if (segments[i] != _name) continue;
      return _inner(request.change(path: p.url.joinAll(segments.take(i + 1))));
    }

    return new Response.notFound("Not found.");
  }
}
