public without sharing class LookUpUtilController {
    @AuraEnabled(cacheable=true)
    public static List<Record> lookUp(String searchTerm, String objName, String filter) {
        system.debug('lookUp');
        system.debug('objName:'+objName);
        system.debug('searchTerm:'+searchTerm);
        system.debug('filter:'+filter);
        List<Record> recordList = new List<Record>();
        //deloitte-zhj 20231121 PIPL还原 去掉AWS_Data_Id__c
        String searchQuery = 'select Id,name from '+objName+' where id != null '; //deloitte-zhj 加上AWS_Data_Id__c进行PIPL 2023/07/19 
        if(String.isNotBlank(searchTerm)){
            searchQuery += 'and Name LIKE \'%' + searchTerm + '%\'';
        }
        if(String.isNotBlank(filter)){
            searchQuery += 'and AccountId = \'' + filter + '\'';
            // searchQuery += 'and id = \'' + 'a2R0l000000KXmaEAG' + '\'';
        }
        if(String.isBlank(searchTerm)&&String.isBlank(filter)){
            //如果没有条件 限制查询条数以免数据量过多
            searchQuery += 'limit 20';
        }
        system.debug('searchQuery:'+searchQuery);
        List<Sobject> queryResult = Database.query(searchQuery);
        if(queryResult.size()>0){
            for(Sobject sobj : queryResult){
                Record r = new Record();
                r.Id = sobj.id;
                r.Name = (String)sobj.get('name');
                //deloitte-zhj 20231121 PIPL还原 去掉AWS_Data_Id__c
                //r.AWSDataId = (String)sobj.get('AWS_Data_Id__c'); //deloitte-zhj 加上AWS_Data_Id__c进行PIPL 2023/07/19 
                recordList.add(r);
            }
        }
        system.debug(recordList);
        return recordList;
    }

    //deloitte-zhj 搜索需要的PI数据 2023/07/19 start
    @AuraEnabled
    public static ResponseBodyLWC searchContactInit(String accountId) {
        ResponseBodyLWC res = new ResponseBodyLWC();
        Map<String, object> data = new Map<String, object>();
        res.entity = data;
        System.debug('accountId = ' + accountId);
        try {
            List<Contact> conList = new List<Contact>();
            if (checkNullString(accountId)) {
                conList = new List<Contact>();
            } else {
                Account act = [SELECT id, Hospital__c,Department_Class__c FROM Account WHERE id = :accountId];
//deloitte-zhj 20231121 PIPL还原 多查LastName sql去掉AWS_Data_Id__c 限制只查50条
                conList = new List<Contact>(
                    [
                        SELECT Id,LastName, Account.Name
                        FROM Contact
                        // WHERE Account.Hospital__c = :act.Hospital__c AND AWS_Data_Id__c != ''
                        WHERE Account.Department_Class__c = :act.Department_Class__c and Account.Is_Active__c != '無効'  and Isactive__c != '无效(退休)' and Isactive__c != '无效(重复)' limit 50
                    ]
                );
            System.debug('act = ' + act);
                System.debug('conList = ' + conList);
            }
            //deloitte-zhj 20231121 PIPL还原 start
            data.put('conList', conList);
            // 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);
            // }
            // data.put('awsIdToContactMap', awsIdToContactMap);
            // data.put('conAWSIds', conAWSIds);
//deloitte-zhj 20231121 PIPL还原 end
            res.status = 'Success';
            res.code = 200;
            res.msg = '';
            return res;
        } catch (Exception e) {
            return new ResponseBodyLWC('Error', 500, e.getMessage() + ' ' + e.getLineNumber(), '');
        }
    }

    public static Boolean checkNullString(String inputString) {
        if (String.isEmpty(inputString) || String.isBlank(inputString)) {
            return true;
        }
        return false;
    }
    //deloitte-zhj 搜索需要PI的数据 2023/07/19 end

    //deloitte-zhj 获取PIPL需要的数据 2023/07/19 start
    @AuraEnabled
    public static ResponseBodyLWC getPIPLInfo(String searchTerm, String objName, String filter) {
        try{
            ResponseBodyLWC res = new ResponseBodyLWC();
            Map<String, object> data = new Map<String, object>();
            res.entity = data;
            data.put('staticResourceContact', JSON.serialize(PIHelper.getPIIntegrationInfo('Contact')));
            res.status = 'Success';
            res.code = 200;
            res.msg = '';
            return res;
        }catch(Exception e){
            return new ResponseBodyLWC('Error', 500, e.getMessage() + ' ' + e.getLineNumber(), '');
        }
    }
    //deloitte-zhj 获取PIPL需要的数据 2023/07/19 end

    //deloitte-zhj 新建判断重复 2023/07/19 start
    @AuraEnabled
    public static ResponseV2 searchContactByAccountId(String accountId,String visitorPlaceId) {
        System.debug('accountId = ' + accountId);
        System.debug('visitorPlaceId = ' + visitorPlaceId);
        ResponseV2 res = new ResponseV2();
        try{
            // List<Account> account = [select Id,Name from Account where Id = :accountId];
            List<RecordType>  recordTypes= [select Id from RecordType where  SobjectType = 'Account' and DeveloperName in ('Department_GYN','Department_OTH','Department_BF','Department_GI','Department_GS','Department_URO','Department_ENT','Department')];
            List<String> recordTypeIds = new List<String>();
            for(RecordType rt : recordTypes) {
                recordTypeIds.add(rt.Id);
            }

            Account visitorPlace = null;
            visitorPlace = [select Id, Hospital__c from Account where Id=:visitorPlaceId];
            String searchQuery = 'select Id,name,Hospital__c from Account where  Id=:accountId';
            searchQuery += '   and RecordTypeId in :recordTypeIds';
            List<Account> account = Database.query(searchQuery);
            if(account.size() <= 0 ){
                res.message = '没有找到对应客户';
                // res.message = '请选择访问场所对应的医院下的科室';
                res.status = 'fail';
                return res;
            } else if (visitorPlace.Hospital__c != account[0].Hospital__c) {
                 res.message = '请选择访问场所对应的医院下的科室';
                res.status = 'fail';
                return res;
            }
            List<Contact> contactList = [select id,AWS_Data_Id__c, CManageCode__c,Name from Contact where AccountId = :account[0].Id];
            Map<String,String> dataIdManageCodeMap = new Map<String,String>();
            for(Contact contact : contactList){
                dataIdManageCodeMap.put(contact.AWS_Data_Id__c,contact.CManageCode__c);
            }
            res.dataIdManageCodeMap = dataIdManageCodeMap;
            res.accountName = account[0].Name;
            res.contactList = contactList;
            Map<String,String> accMap= new Map<String,String>();
            List<Account> accList=[select ID,Is_Active__c,Is_Active_Formula__c from Account where ID =:accountId];
            if(accList.size()>0){
                for(Account acc:accList){
                    if (String.isNotBlank(acc.Is_Active__c)){
                        String subId = acc.Id;
                        accMap.put(subId.substring(0,15), acc.Is_Active__c);
                        continue;
                    }
                    if (String.isNotBlank(acc.Is_Active_Formula__c)){
                        String subId = acc.Id;
                        accMap.put(subId.substring(0,15), acc.Is_Active_Formula__c);
                    }
                }
            }
            System.debug('accMap= ' + accMap);
            res.isNameMobileVerif = true;
            res.isMobileVerif = true;
            res.status = 'success';
            return res;
        }catch(Exception e){
            res.message = e.getMessage() + ' ' + e.getLineNumber();
            res.status = 'fail';
            return res;
        }
    }

    public class ResponseV2{
        @AuraEnabled
        public List<Contact> contactList{set;get;}
        @AuraEnabled
        public String accountName{set;get;}
        @AuraEnabled
        public Map<String,String> dataIdManageCodeMap{set;get;}
        @AuraEnabled
        public Boolean isMobileVerif;
        @AuraEnabled
        public Boolean isNameMobileVerif;
        @AuraEnabled
        public String message{set;get;}
        @AuraEnabled
        public String status{set;get;}
    }
    //deloitte-zhj 新建判断重复 2023/07/19 end

    public class Record {
        @AuraEnabled public String Id;
        @AuraEnabled public String Name;
        @AuraEnabled public String AWSDataId; //deloitte-zhj 加上AWS_Data_Id__c进行PIPL 2023/07/19 
    }
}