/*
 * 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 SearchContactController() {
        String accountId = ApexPages.currentPage().getParameters().get('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(String.isNotBlank(accountId) && String.isNotEmpty(accountId)){
            String accountIdStr = '';
            String[] accountIds = accountId.split(',');
            List<String> accountIdList = new List<String>();
            for(String s : accountIds){
                accountIdList.add(s);
            }
            conList = new List<Contact>([select Id,AWS_Data_Id__c from Contact where AccountId in:accountIdList and AWS_Data_Id__c!='']);
            System.debug('conList:'+conList);
        }        
        //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) {
        Response resp = new Response();
        resp.status = 'fail';
        if(String.isBlank(awsContactIds)||String.isEmpty(awsContactIds)){
            return resp;
        }
        List<String> awsDataIds = (List<String>) JSON.deserialize(awsContactIds, List<String>.class);
        Map<String,Contact> awsIdToContactMapTemp = new Map<String,Contact>();
        List<Contact> conListTemp = new List<Contact>([select Id,AWS_Data_Id__c from Contact where AWS_Data_Id__c in:awsDataIds]);
        for(Contact con:conListTemp){
            awsIdToContactMapTemp.put(con.AWS_Data_Id__c,con);
        }
        if(awsIdToContactMapTemp.keySet().size()>0){
            resp.status = 'success';
            resp.message = JSON.serialize(awsIdToContactMapTemp);
        }
        return resp;
    }

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