@RestResource(urlMapping='/OFSHpArrive/*')
global with sharing class OFSHpArriveRest {
	@HttpPost
    global static void doPost(Id Eid) {
    	system.debug('OFSHpArriveRest.start');
    	RestResponse res = RestContext.response;
        res.addHeader('Content-Type', 'application/json');
        
        String jsonResponse;
        
    	List<Event> elist = [select 
				    			  id, ActivityDate, OwnerId, Subject, whatid__c, EventC_ID__c, NextEventC_ID__c, AppCdId__c, SyncCreatedDate__c, 
								  StartDateTime, EndDateTime, DurationInMinutes, Main_Visit_Location__c, Activity_Type2__c, IsScheduled__c, BeforeActivityDate__c,
								  Purpose_Type__c, Location, Related_Opportunity1__c, Related_Service1__c, Related_Opportunity1_ID__c, Related_Service1_ID__c, 
								  WS_flg__c, HPArriveFlg__c, EndDateTime_org__c, StartDateTime_org__c
							from Event where id = :Eid];
		if(elist.size()<=0){
			//TODO:
			//error message:no event or wrong Id 
			res.statusCode = 200;
        	jsonResponse = '{"'+ System.Label.OFSErrorStatus +'": "'+ System.Label.OFSErrorFailure +'", "'+ System.Label.OFSErrorMessage +'": "No matching event was found"}';
        	res.responseBody = blob.valueOf(jsonResponse);
       		return;
       		
		}else{
			//TODO: 同時の到着されたevent をチェックする、 一つしかないはず
			
			if(elist[0].HPArriveFlg__c == false){
				if(elist[0].StartDateTime_org__c==null && elist[0].EndDateTime_org__c==null){
					elist[0].StartDateTime_org__c = elist[0].StartDateTime;
					elist[0].EndDateTime_org__c = elist[0].EndDateTime;
				}
				elist[0].StartDateTime = Datetime.now();
				elist[0].EndDateTime = elist[0].StartDateTime.addMinutes(elist[0].DurationInMinutes) ;
				elist[0].HPArriveFlg__c = true;
			} else {
				//到着重複
				res.statusCode = 200;
				jsonResponse = '{"'+ System.Label.OFSErrorStatus +'": "'+ System.Label.OFSErrorFailure +'", "'+ System.Label.OFSErrorMessage +'": "'+ System.Label.OFSErrorDuplication +'"}';
		        res.responseBody = blob.valueOf(jsonResponse);
				return;
			}
			
			try{
				update elist[0];
				
				res.statusCode = 200;
				jsonResponse = '{"'+ System.Label.OFSErrorStatus +'": "'+ System.Label.OFSErrorSuccess +'", "'+ System.Label.OFSErrorMessage +'": "'+ elist[0].Id +'"}';
		        res.responseBody = blob.valueOf(jsonResponse);
		        return;
			}catch ( Exception ex ) {
				//error message:cannot update exception
				res.statusCode = 200;
				jsonResponse = '{"'+ System.Label.OFSErrorStatus +'": "'+ System.Label.OFSErrorFailure +'", "'+ System.Label.OFSErrorMessage +'": "'+ ex +'"}';
		        res.responseBody = blob.valueOf(jsonResponse);
				return;
			}
		}		
    }
}