﻿(function () {
    'use strict';

    angular
        .module('TDM.Web')
        .factory('jobService', jobService);

    jobService.$inject = ['$http', '$q'];

    function jobService($http, $q) {

        var fns = {};

        fns.getAccountLifeCycleSummary = function () {
            var deferral = $q.defer();

            $http.get("api/Job/GetAccountLifeCycleSummary", null).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });
            return deferral.promise;
        }

        fns.getJobSummary = function (jobId,includeDisabled) {
            var deferral = $q.defer();

            $http.get2("api/Job/GetJobSummary", { jobId: jobId, includeDisabled: includeDisabled }, null).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });
            return deferral.promise;
        }

        fns.createJobFromPrequote = function (prequoteId) {
            var deferral = $q.defer();

            $http.get("api/Job/CreateJobFromPrequote?prequoteId=" + prequoteId, null).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });
            return deferral.promise;
        }

        fns.cancelJob = function (entityIdModel, hardRemove) {
            var deferral = $q.defer();
            if (angular.isDefined(hardRemove)) {
                $http.post("api/Job/CancelJob?hardRemove=" + hardRemove, entityIdModel).then(
                    function (response) {
                        deferral.resolve(response.data);
                    },
                    function (response) {
                        deferral.reject(response);
                    });
            } else {
                $http.post("api/Job/CancelJob", entityIdModel).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });
            }
            return deferral.promise;
        }

        fns.createJob = function (jobModel) {
            var deferral = $q.defer();
            $http.post("api/Job/CreateJob", jobModel).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });
            return deferral.promise;
        }

        fns.submitJob = function (jobModel) {
            var deferral = $q.defer();
            $http.post("api/Job/SubmitJob", jobModel).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });
            return deferral.promise;
        }


        fns.enableJob = function (jobId) {
            var deferral = $q.defer();

            $http.get2("api/Job/EnableJob/", { jobId: jobId }, null).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });
            return deferral.promise;
        }

        fns.updateJob = function (jobModel) {
            var deferral = $q.defer();
            $http.post("api/Job/UpdateJob", jobModel).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });
            return deferral.promise;
        }

        fns.confirmMailDatJob = function (jobIdModel) {
            var deferral = $q.defer();
            $http.post("api/Job/ConfirmMailDatJob", jobIdModel).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });
            return deferral.promise;
        }

        fns.getJobsPagedSorted = function (count, page, parameters, jpathfilter) {
            var deferral = $q.defer();

            var config = null;
            if (jpathfilter != null) {
                config = {};
                config.headers = {};
                config.headers[window.config.jsonFieldFilterHeaderName] = jpathfilter;
            }

            $http.post("api/Job/GetAllJobs/?count=" + count + "&page=" + page, parameters, config).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });
            return deferral.promise;
        }

        fns.validateJobForSubmission = function (jobId) {
            var deferral = $q.defer();

            $http.get("api/Job/ValidateJobForSubmission/?jobId=" + jobId, null).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });
            return deferral.promise;
        };

        fns.duplicateJob = function (entityIdModel) {
            var deferral = $q.defer();
            $http.post("api/Job/DuplicateJob", entityIdModel).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });
            return deferral.promise;
        }

        fns.holdJob = function (id) {
            var deferral = $q.defer();
            $http.post("api/Job/HoldJob", { id: id }).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });
            return deferral.promise;
        }

        fns.canEdit = function (id) {
            var deferral = $q.defer();

            $http.get("api/Job/CanEdit?jobId=" + id, null).then(
                function (response) {
                    deferral.resolve(response.data);
                },
                function (response) {
                    deferral.reject(response);
                });

            return deferral.promise;
        }

        fns.mergeJobs = function(sourceJobId, destJobId) {
            var deferral = $q.defer();

            $http.post("api/Job/MergeJobs", { sourceJobId: sourceJobId, destJobId: destJobId }).then(
                function(response) {
                    deferral.resolve(response.data);
                },
                function(response) {
                    deferral.reject(response);
                });

            return deferral.promise;
        }

        return fns;
    }
})();