goog.provide('webfont.modules.google.GoogleFontApi');
goog.require('webfont.modules.google.FontApiUrlBuilder');
goog.require('webfont.modules.google.FontApiParser');
goog.require('webfont.FontWatchRunner');
goog.require('webfont.StyleSheetWaiter');
/**
 * @constructor
 * @implements {webfont.FontModule}
 */
webfont.modules.google.GoogleFontApi = function(domHelper, configuration) {
  this.domHelper_ = domHelper;
  this.configuration_ = configuration;
};
/**
 * @const
 * @type {string}
 */
webfont.modules.google.GoogleFontApi.NAME = 'google';
goog.scope(function () {
  var GoogleFontApi = webfont.modules.google.GoogleFontApi,
	  FontWatchRunner = webfont.FontWatchRunner,
	  StyleSheetWaiter = webfont.StyleSheetWaiter,
	  FontApiUrlBuilder = webfont.modules.google.FontApiUrlBuilder,
	  FontApiParser = webfont.modules.google.FontApiParser;
  GoogleFontApi.METRICS_COMPATIBLE_FONTS = {
	"Arimo": true,
	"Cousine": true,
	"Tinos": true
  };
  GoogleFontApi.prototype.load = function(onReady) {
	var waiter = new StyleSheetWaiter();
	var domHelper = this.domHelper_;
	var fontApiUrlBuilder = new FontApiUrlBuilder(
		this.configuration_['api'],
		this.configuration_['text']
	);
	var fontFamilies = this.configuration_['families'];
	fontApiUrlBuilder.setFontFamilies(fontFamilies);
	var fontApiParser = new FontApiParser(fontFamilies);
	fontApiParser.parse();
	domHelper.loadStylesheet(fontApiUrlBuilder.build(), waiter.startWaitingLoad());
	waiter.waitWhileNeededThen(function() {
	  onReady(fontApiParser.getFonts(), fontApiParser.getFontTestStrings(), GoogleFontApi.METRICS_COMPATIBLE_FONTS);
	});
  };
});
