import 'dart:io';
import 'package:source_span/source_span.dart';
import 'dart2js_mapping.dart';

abstract class FileProvider {
  String sourcesFor(Uri uri);
  SourceFile fileFor(Uri uri);
  Dart2jsMapping mappingFor(Uri uri);
}

class CachingFileProvider implements FileProvider {
  final Map<Uri, String> _sources = {};
  final Map<Uri, SourceFile> _files = {};
  final Map<Uri, Dart2jsMapping> _mappings = {};

  String sourcesFor(Uri uri) =>
      _sources[uri] ??= new File.fromUri(uri).readAsStringSync();

  SourceFile fileFor(Uri uri) =>
      _files[uri] ??= new SourceFile.fromString(sourcesFor(uri));

  Dart2jsMapping mappingFor(Uri uri) => _mappings[uri] ??= parseMappingFor(uri);
}

/// A provider that converts `http:` URLs to a `file:` URI assuming that all
/// files were downloaded on the current working directory.
///
/// Typically used when downloading the source and source-map files and applying
/// deobfuscation locally for debugging purposes.
class DownloadedFileProvider extends CachingFileProvider {
  _localize(uri) {
    if (uri.scheme == 'http' || uri.scheme == 'https') {
      String filename = uri.path.substring(uri.path.lastIndexOf('/') + 1);
      return Uri.base.resolve(filename);
    }
    return uri;
  }

  String sourcesFor(Uri uri) => super.sourcesFor(_localize(uri));

  SourceFile fileFor(Uri uri) => super.fileFor(_localize(uri));

  Dart2jsMapping mappingFor(Uri uri) => super.mappingFor(_localize(uri));
}

warn(String message) {
  if (_seenMessages.add(message)) {
    print(message);
  }
}

Set<String> _seenMessages = new Set<String>();
