(function () {
    'use strict';
    
	angular.module('pruexpress').factory('registrationService', registrationService);

    registrationService.$inject = ['$http','uuid2'];
	
    function registrationService($http,uuid2) {     
        var service = {};
        service.registerAgency = registerAgency;
        service.registerFinancial = registerFinancial;

        return service;

        function registerAgency(regObj) {
			var requestObj = {
					"Header": {
					  "PruRequestHeader": {
						   "MessageID": generateUUID(),
						   "TrackingID": "",
						   "OriginationSystem": "PRUXPRESS",
						   "DestinationSystem": "PRUXPRESS",
						   "RequesterId": "",
						   "OnBehalfOf": "",
						   "SendingTimeStamp": new Date().toLocaleString()
						}
					},
					"Body": {
						"GAStaffRegistration": {
							"FirstName": regObj.firstName,
							"LastName": regObj.lastName,
							"Email": regObj.email,
							"TINNum": regObj.tin.tinNum_a+regObj.tin.tinNum_b,
							"Firm" : {
								"FirmName" : regObj.firm.agencyName,
								"OwnerFirstName" : regObj.firm.ownerFirstName,
								"OwnerLastName" : regObj.firm.ownerLastName,
								"Address": {
											"StreetAddress": regObj.firm.address.streetAddress,
											"SuiteNum": regObj.firm.address.suiteNum,
											"City": regObj.firm.address.city,
											"StateCode": regObj.firm.address.stateCode,
											"ZipCode": regObj.firm.address.zipcode
										},
								"FirmPhoneNum" : regObj.firm.phone.firmPhone_a+regObj.firm.phone.firmPhone_b+regObj.firm.phone.firmPhone_c,
							},
							"KeyContactEmail" : regObj.contactEmail,
							"KeyContactPhone": regObj.contactPhone.contactPhone_a+regObj.contactPhone.contactPhone_b+regObj.contactPhone.contactPhone_c,
							"UserId": regObj.userId,
							"AcceptTermsConditions": regObj.acceptTermsConditions
						}						
					}
				};
				
				console.log("GaStaff requestObj  >>>",encodeURIComponent(JSON.stringify(requestObj)));			
            return $http.post('/wps/pruapp/registerUser?reqType=GAStaff',encodeURIComponent(JSON.stringify(requestObj))).then(handleSuccess, handleError('Error Registering Agency'));
        }

        function registerFinancial(regObj) {			
				var requestObj = {
					"Header": {
					  "PruRequestHeader": {
						   "MessageID": generateUUID(),
						   "TrackingID": "",
						   "OriginationSystem": "PRUXPRESS",
						   "DestinationSystem": "PRUXPRESS",
						   "RequesterId": "",
						   "OnBehalfOf": "",
						   "SendingTimeStamp": new Date().toLocaleString()
					  }
					},
					"Body": {
						"ExternalProducerRegistration": {
						   "FirstName": regObj.firstName,
						   "LastName": regObj.lastName,
						   "Email": regObj.email,
						   "SocialSecurityNum": regObj.socialSecurityNum,
						   "Address": {
								"StreetAddress": regObj.address.streetAddress,
								"SuiteNum": regObj.address.suiteNum,
								"City": regObj.address.city,
								"StateCode": regObj.address.stateCode,
								"ZipCode": regObj.address.zipcode
							},
						   "PhoneNum": regObj.phone.phone_a+regObj.phone.phone_b+regObj.phone.phone_c,
						   "UserId": regObj.userId,
						   "AcceptTermsConditions": regObj.acceptTermsConditions
						}
					}
				};
				
				console.log("Producer requestObj  >>>",encodeURIComponent(JSON.stringify(requestObj)));        
            return $http.post('/wps/pruapp/registerUser?reqType=Producer',encodeURIComponent(JSON.stringify(requestObj))).then(handleSuccess, handleError('Error registering producer'));
        }

        // private methods
        function handleSuccess(res) {         
            return res.data.Body.RegistrationResponse;
        }

		 function generateUUID() {
            return uuid2.newuuid();
        }		

        function handleError(error) {          
            return function () {
                return { success: false, message: error };
            };
        }
    }
})();