angular.module('portainer.docker')
.factory('BuildService', ['$q', 'Build', 'FileUploadService', function BuildServiceFactory($q, Build, FileUploadService) {
  'use strict';
  var service = {};

  service.buildImageFromUpload = function(names, file, path) {
    var deferred = $q.defer();

    FileUploadService.buildImage(names, file, path)
    .then(function success(response) {
      var model = new ImageBuildModel(response.data);
      deferred.resolve(model);
    })
    .catch(function error(err) {
      deferred.reject(err);
    });

    return deferred.promise;
  };

  service.buildImageFromURL = function(names, url, path) {
    var params = {
      t: names,
      remote: url,
      dockerfile: path
    };

    var deferred = $q.defer();

    Build.buildImage(params, {}).$promise
    .then(function success(data) {
      var model = new ImageBuildModel(data);
      deferred.resolve(model);
    })
    .catch(function error(err) {
      deferred.reject(err);
    });

    return deferred.promise;
  };

  service.buildImageFromDockerfileContent = function(names, content) {
    var params = {
      t: names
    };
    var payload = {
      content: content
    };

    var deferred = $q.defer();

    Build.buildImageOverride(params, payload).$promise
    .then(function success(data) {
      var model = new ImageBuildModel(data);
      deferred.resolve(model);
    })
    .catch(function error(err) {
      deferred.reject(err);
    });

    return deferred.promise;
  };

  return service;
}]);