(function () {
  var ns = $.namespace('pskl.service.palette');

  var fileReaders = {
    'gpl' : ns.reader.PaletteGplReader,
    'pal' : ns.reader.PalettePalReader,
    'txt' : ns.reader.PaletteTxtReader,
    'img' : ns.reader.PaletteImageReader
  };

  ns.PaletteImportService = function () {};

  ns.PaletteImportService.prototype.read = function (file, onSuccess, onError) {
    var reader = this.getReader_(file, onSuccess, onError);
    if (reader) {
      reader.read();
    } else {
      console.error('Could not find reader for file : %s', file.name);
    }
  };

  ns.PaletteImportService.prototype.isImage_ = function (file) {
    return file.type.indexOf('image') === 0;
  };

  ns.PaletteImportService.prototype.getReader_ = function (file, onSuccess, onError) {
    var ReaderClass = this.getReaderClass_(file);
    if (ReaderClass) {
      return new ReaderClass(file, onSuccess, onError);
    } else {
      return null;
    }
  };

  ns.PaletteImportService.prototype.getReaderClass_ = function (file) {
    var ReaderClass;
    if (this.isImage_(file)) {
      ReaderClass = fileReaders.img;
    } else {
      var extension = this.getExtension_(file);
      ReaderClass = fileReaders[extension];
    }
    return ReaderClass;
  };

  ns.PaletteImportService.prototype.getExtension_ = function (file) {
    var parts = file.name.split('.');
    var extension = parts[parts.length - 1];
    return extension.toLowerCase();
  };
})();
