/*
 * Author: Bubba Li
 * Created Date: 02/08/2022
 * Purpose: SearchContactController
 * Test Class: SearchContactController
 * History: 
 *      02/08/2022 - Bubba Li - Initial Code.
 * 
 * */
public without sharing class SearchContactController {
    public String searchKeyWord{set;get;}
    public String staticResource {get; set;}
    public String contactAWSIds {set;get;}
    public String contactsInfo {set;get;}
    public String PIPL_Search_Contact_Label{set;get;}
    public String aId{set;get;}
    public static Boolean checkNullString(String inputString){
        if(String.isEmpty(inputString)||String.isBlank(inputString)){
            return true;
        }
        return false;
    }
    public SearchContactController() {
        String accountId = ApexPages.currentPage().getParameters().get('accountId');
        searchKeyWord = ApexPages.currentPage().getParameters().get('searchContactKeyWord');
        aId = accountId;
        PIPL_Search_Contact_Label = Label.PIPL_Search_Contact_Label;
        //1. Query Contact by accountId
        List<Contact> conList = new List<Contact>();
        system.debug('Account Id from Front-end:'+accountId);
        if(checkNullString(accountId)&&checkNullString(searchKeyWord)){
            conList = new List<Contact>();
        }else{
            if(checkNullString(accountId)){
                conList = new List<Contact>(); 
            }else {
                //2022-5-12 yjk 将科室匹配改为医院匹配查询联系人 statt
                Account act = [select id,Hospital__c from Account where id = :accountId];
                conList = new List<Contact>([select Id,AWS_Data_Id__c,Account.Name from Contact  where 	Account.Hospital__c=:act.Hospital__c and AWS_Data_Id__c!='']); 
                //2022-5-12 yjk 将科室匹配改为医院匹配查询联系人 end
            }
            
        }    
        //2. Prepare the Contact Info
        Map<String,Contact> awsIdToContactMap = new Map<String,Contact>();
        List<String> conAWSIds = new List<String>();
        for(Contact con:conList){
            conAWSIds.add(con.AWS_Data_Id__c);
            awsIdToContactMap.put(con.AWS_Data_Id__c,con);
        }
        contactsInfo = JSON.serialize(awsIdToContactMap);
        contactAWSIds = JSON.serialize(conAWSIds);
        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));        
    }

    @RemoteAction
    public static Response searchContacts(String awsContactIds,String searchContactName,String accountId) {
        system.debug('awsContactIds = ' + awsContactIds);
        Response resp = new Response();
        resp.status = 'fail';
        Map<String,Contact> awsIdToContactMapTemp = new Map<String,Contact>();
        if(!checkNullString(awsContactIds)){
            List<String> awsDataIds = (List<String>) JSON.deserialize(awsContactIds, List<String>.class);
            List<Contact> conListTemp = new List<Contact>();
            if(!checkNullString(accountId)){
                //2022-5-12 yjk 将科室匹配改为医院匹配查询联系人 statt
                Account act = [select id,Hospital__c from Account where id = :accountId];
                conListTemp = new List<Contact>([select Id,AWS_Data_Id__c,Account.Name from Contact where Account.Hospital__c=:act.Hospital__c and AWS_Data_Id__c in:awsDataIds]);
                //2022-5-12 yjk 将科室匹配改为医院匹配查询联系人 end
            }else {
                conListTemp = new List<Contact>([select Id,AWS_Data_Id__c,Account.Name from Contact where AWS_Data_Id__c in:awsDataIds]);
            }
            for(Contact con:conListTemp){
                awsIdToContactMapTemp.put(con.AWS_Data_Id__c,con);
            }
        }
        System.debug('awsIdToContactMapTemp = ' + awsIdToContactMapTemp);
        Map<String,Contact> noPIContactMapTemp = new Map<String,Contact>();
        List<Contact> partnerContactList = AWSServiceTool.getNoPIContact(searchContactName,accountId);
        System.debug('partnerContactList = ' + partnerContactList);            
        if(partnerContactList.size()>0){
            for(Contact con:partnerContactList){
                noPIContactMapTemp.put(con.Id,con);
            }               
        }
        if(awsIdToContactMapTemp.keySet().size()>0 ||noPIContactMapTemp.keySet().size()>0){
            resp.status = 'success';
            resp.message = JSON.serialize(awsIdToContactMapTemp);// PI contact info
            resp.noPIContactList = JSON.serialize(noPIContactMapTemp);//NoPI contact info
        }
        return resp;
    }

    @RemoteAction
    public static Response searchContactsNoPI(String contactName) {
        Response resp = new Response();
        resp.status = 'fail';
        List<Contact> conListTemp = new List<Contact>([select Id,Name,Account.Name,Phone,Email,MobilePhone from Contact where Name like :contactName]);
        if(conListTemp.size() > 0){
            resp.status = 'success';
            resp.message = JSON.serialize(conListTemp);
        }
        return resp;
    }

    public class Response{
        public String message{set;get;}
        public String status{set;get;}
        public String noPIContactList{set;get;}
    }
}