// Copyright (c) 2013, 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.

part of vmservice;

String detectMimeType(String name) {
  var extension = new Path(name).extension;
  switch (extension) {
    case 'html':
      return 'text/html; charset=UTF-8';
    case 'dart':
      return 'application/dart; charset=UTF-8';
    case 'js':
      return 'application/javascript; charset=UTF-8';
    case 'css':
      return 'text/css; charset=UTF-8';
    case 'gif':
      return 'image/gif';
    case 'png':
      return 'image/png';
    case 'jpg':
      return 'image/jpeg';
    case 'jpeg':
      return 'image/jpeg';
    default:
      return 'text/plain';
  }
}


class Resource {
  final String name;
  final String mimeType;
  final List<int> data;
  Resource(this.name, this.mimeType, this.data);
  static final Map<String, Resource> resources = new Map<String, Resource>();
}


void _addResource(String name, List<int> data) {
  var mimeType = detectMimeType(name);
  Resource resource = new Resource(name, detectMimeType(name), data);
  Resource.resources[name] = resource;
}
