var client = ZAFClient.init();
var sideBarClient;
var currentUser;
var currentTicketInfo = "undefined";
var existingTicketInfo = "undefined";
var existingRoomId = "";
var makeRoomFlag = false;

var userInfo = "undefined";

// 사이드바에서 보낸 티켓정보를 받는 client on Event
client.on('currentTicketInfo', (data) => {
	console.log('currentTicketInfo >>> ', data);
	currentTicketInfo = data.ticket;

	showUserInfo(currentTicketInfo.requester_id);
});

client.on('pane.activated', (data) => {
	if("a8f08a0b-fa6e-49ca-b3f5-ee8960bb30e9" != asccessToken_icomsys){
		swal("해당 페이지에 대한 권한이 없습니다.",{
			icon:"warning",
			buttons:"확인"
		}).then((result) => {
			client.invoke('popover', 'hide');
		});
		return;
	}

// 	200720 : 기존과 다르게 top bar를 실행했을때, 새로운 Room 생성
//	200722 : ticket이 없으면 Room 생성 안 함
//  200922 : ticket의 정보가 기존 ticket과 같으면 New Room을 생성하지 않는다
	if( "undefined" != currentTicketInfo && existingTicketInfo != currentTicketInfo ){
		fncConnectOver();
		vmParam = 'company='+$("#custName").val()+'&userid='+$("#userId").val();
		requestPage(vmParam);
	} else if("undefined" != currentTicketInfo){
		if(true == makeRoomFlag){
			fncConnectOver();
			vmParam = 'company='+$("#custName").val()+'&userid='+$("#userId").val();
			requestPage(vmParam);
		}
	}
//	console.log("zenDeskInfo.account.subdomain >>> ",zenDeskInfo.account.subdomain);
	if(zenDeskInfo.account.subdomain == "pdigsneotek1588842173"
		|| zenDeskInfo.account.subdomain == "z3nlgcns") {
		$('#telNo').val(userInfo.user.phone);
	}
});

// menifest.json에 등록된 icomsys token 가져오기
client.metadata().then(function (metadata) {
	asccessToken_icomsys = metadata.settings.icomsys;
//    console.log("asccessToken_icomsys : ", asccessToken_icomsys);
});

client.on('pane.deactivated', (data) => {
//  200922 : 기존의 티켓 정보에 현재 티켓 정보를 저장
	existingTicketInfo = currentTicketInfo;
	existingRoomId = $('#textUrl').val().substring($('#textUrl').val().indexOf('room/')+5, $('#textUrl').val().lastIndexOf('/'));
//	200720 : top bar 모달 종료시 진행
//	currentTicketInfo = "undefined";
//	fncConnectOver();
});

// zendesk 상담사 id 가져오기
var showTheCurrentUserPromise = client.request('/api/v2/users/me.json').then(function (response) {
	currentUser = response.user.id;
	$("#userId").val(currentUser);
//    console.log("showTheCurrentUserPromise >>> " + currentUser);
}).catch(error => console.error(error));

var zenDeskInfo = client.context().then(function(context) {
	zenDeskInfo = context;
	console.log("zenDeskInfo >>> ", zenDeskInfo);
});

var showUserInfo = function () {
	return new Promise(function (resolve, reject) {
		var settings = {
			url: encodeURI('/api/v2/users/' + currentTicketInfo.requester_id + '.json')
			, type: 'PUT'
			, headers : {'Content-Type': 'application/json'}
			, data: null
		};
		client.request(settings).then(function (response) {
			console.log('showUserInfo success >>> ', response);
			userInfo = response;
			resolve(response);
		}).catch(error => console.error(error));
	});
};

// 티켓을 업데이트 하는 Promise
// https://developer.zendesk.com/rest_api/docs/support/tickets#update-ticket
var updateTicketPromise = function (requestParam) {
	return new Promise(function (resolve, reject) {
		var settings = {
			url: encodeURI('/api/v2/tickets/' + currentTicketInfo.id + '.json')
			, type: 'PUT'
			, headers : {'Content-Type': 'application/json'}
			, data: JSON.stringify(requestParam)
		};
		client.request(settings).then(function (response) {
			// console.log('updateTicketPromise success >>> ', response);
			resolve(response);
		}).catch(error => console.error(error));
	});
};

// 개발 가이드를 위해 버튼을 눌렀을 때
// html_body의 내용으로 티켓이 업데이트 되도록 만들어놓았습니다.
$(document).on('click', '#btnSaveHistory', function () {
	var html_body = fncSaveCounseling();

	// 티켓의 속성에 대한 설명은 아래 url을 참고
	// https://developer.zendesk.com/rest_api/docs/support/tickets#json-format
	var requestParam = {"ticket": {
			"status": currentTicketInfo.status, // "open", "pending", "hold", "solved", "closed"
			"comment": { "html_body": html_body, "author_id": currentUser.id, "public" : false}
		}
	}
	updateTicketPromise(requestParam);

//	200720 top bar 모달 종료
	client.invoke('popover', 'hide');
//  200922 top bar 모달 비활성화시에도 Room 유지하기 / save, connect over는 새 room 생성
	makeRoomFlag = true;
	fncConnectOver();
});

$(document).on('click', '#btnConnectOver', function () {
	client.invoke('popover', 'hide');
//  200922 top bar 모달 비활성화시에도 Room 유지하기 / save, connect over는 새 room 생성
	makeRoomFlag = true;
	fncConnectOver();
});

$(document).on('click', '#btnNewRoom', function () {
//  200922 top bar 모달 비활성화시에도 Room 유지하기 / new room 생성
	makeRoomFlag = false;
	fncConnectOver();
	vmParam = 'company='+$("#custName").val()+'&userid='+$("#userId").val();
	requestPage(vmParam);
});

// 만일 티켓 저장 실패하거나 서버와의 통신을 실패할 경우, notify를 할 수 있습니다.
// https://developer.zendesk.com/apps/docs/support-api/all_locations#notify
$(document).on('click', '#notify', function () {
	// client.invoke('notify', message[, kind, duration])
	client.invoke('notify', '서버와의 통신이 실패되었습니다.', 'error');
});

$(function () {
	// init();
});