// public with sharing class RepairAndQISToPDFController {
public without sharing class RepairAndQISToPDFController {
    
    // public PDFToBlobController(){
    //     apiName = ApexPages.currentPage().getParameters().get('api');
    //     fields = ApexPages.currentPage().getParameters().get('fields');
    //     fileName = ApexPages.currentPage().getParameters().get('fileName');
    //     controlLimit = Long.valueOf(ApexPages.currentPage().getParameters().get('controlLimit')) ;
    //     init();
    // }
 
    // 设置页面展示的数据
    public static void setImgSrcs(SObject obj,String apiName){
        ImgObjs = new List<ImgObj>();
        String content = (String) obj.get(apiName);

        // while(content.indexOf('<img') != -1 && content.indexOf('></img>') != -1){
        //     String imgTag = content.substring(content.indexOf('<img'),content.indexOf('></img>')+7);
        //     System.debug('imgTag'+imgTag);
           
        //     ImgObj ImgObj = new ImgObj();
        //     // 使用空格分隔
        //     List<String> imgTagSplit =  imgTag.split('\\s');
        //     System.debug('imgTagSplit'+imgTagSplit);
            
        //     if(imgTag.contains('height')){
        //         for(String str :imgTagSplit){
        //             if(str.startsWith('src=')){
        //                 ImgObj.imgSrc = str.substring(5,str.length()-1);
        //                 break;
        //             }
        //         }
        //         Integer imgheight = Integer.valueOf(imgTagSplit[4].substring(0,imgTagSplit[4].length() - 3));
        //         ImgObj.height =  imgheight >= 900 ? '900px' : imgTagSplit[4];
        //     }else{
        //         for(String str :imgTagSplit){
        //             if(str.startsWith('src=')){
        //                 ImgObj.imgSrc = str.substring(5,str.length()-8);
        //                 break;
        //             }
        //         }
        //         ImgObj.height = '900px';
        //     }
        //     ImgObjs.add(ImgObj);
        //     content = content.substring(content.indexOf('></img>')+7,content.length());
        // }
        ImgObj ImgObj = new ImgObj();
        ImgObj.imgSrc = content;
        ImgObj.height = '900px';
        ImgObjs.add(ImgObj);
        System.debug('ImgObjs++'+ImgObjs);
        
    }

    // 生成pdf添加到对应的修理中
    public static PageReference generateAttachment(List<Repair__c> repList){
        PageReference pdfPage ;
        
        List<Repair__c> updateRpr = new List<Repair__c>();
        List<Attachment> attachments = new List<Attachment>();
        for(Repair__c re : repList){
            String generatedFields = re.GeneratedPDFField__c;
            if (checkFieldisGeneratedPDF('ProblemDescription__c',re)) {
                continue;                
            }
            if (re.get('ProblemDescription__c') == null) {
                continue;
            }
            setImgSrcs(re, 'ProblemDescription__c');            

            pdfPage = new PageReference('/apex/repairandqistopdf?api=repair&id='+re.Id);
            Blob pdfBody;
            if(Test.isRunningTest()) { 
                pdfBody = blob.valueOf('Unit.Test');
            } else {
                pdfBody = pdfPage.getContentAsPDF();
            }
            Attachment attach = new Attachment();
            attach.Body = pdfBody;
            attach.Name = re.name + '_' + 'Problem_Discription.pdf';
            attach.ParentId = re.id;
            attachments.add(attach);
            re.GeneratedPDFField__c = 'ProblemDescription__c';
            updateRpr.add(re);
        }
        insert attachments;
        update updateRpr;
        return null;
    }


    // 生成pdf添加到对应的qis中
    public static PageReference generateAttachment(List<QIS_Report__c> qisReports){
        System.debug('1111111111111111111111111111111111111111111111111generateAttachment执行了-----------');

        List<QIS_Report__c> updateQis = new List<QIS_Report__c>();
        List<Attachment> attachments = new List<Attachment>();
        PageReference pdfPage ;
        for(QIS_Report__c qis : qisReports){

            // 需要生成pdf的字段
            List<String> apiNames = new List<String>();
            apiNames.add('problem_detail_photo__c');
            apiNames.add('Photo_1__c');
            apiNames.add('Photo_2__c');
            apiNames.add('Photo_3__c');
            apiNames.add('Photo_4__c');
            apiNames.add('Photo_OSH_1__c');
            apiNames.add('Photo_OSH_2__c');
            apiNames.add('Photo_OSH_3__c');
            apiNames.add('Photo_OSH_4__c');

            for (String apiName : apiNames) {
                String generatedFields =  qis.GeneratedPDFField__c;
                if (checkFieldisGeneratedPDF(apiName,qis)) {
                    continue;
                }
                if (qis.get(apiName) == null) {
                    continue;
                }
                setImgSrcs(qis, apiName);
                pdfPage = new PageReference('/apex/repairandqistopdf?api=qis&id='+qis.Id+'&field='+apiName);
                Blob pdfBody;
                if(Test.isRunningTest()) { 
                    pdfBody = blob.valueOf('Unit.Test');
                } else {
                   pdfBody = pdfPage.getContentAsPDF();
                }
                Attachment attach = new Attachment();
                attach.Body = pdfBody;
                if ('problem_detail_photo__c'.equals(apiName)) {
                    attach.Name =  substringApiName(qis.name) + '_Problem_Discription.pdf';
                }else {
                    attach.Name = substringApiName(qis.name) + '_' + 'Problem_' + apiName.substring(0,apiName.length()-3) + '.pdf';
                }
                attach.ParentId = qis.id;

                attachments.add(attach);
                if (generatedFields == null) {
                    qis.GeneratedPDFField__c = apiName;
                }else {
                    qis.GeneratedPDFField__c += ',' + apiName;
                }
            }
            updateQis.add(qis);
        }
        insert attachments;
        update updateQis;
        
        return null;
    }

    // 主要用于生成qis中问题描述对应的pdf文件名称(比较特殊)
    public static String substringApiName(String name){
        for(Integer i = 0; i < 2; i++){
            name = name.substring(name.indexOf('-')+1);
        }
        return name;
    }

    public static Boolean checkFieldisGeneratedPDF(String apiName,SObject obj){
        String generatedFields = (String) obj.get('GeneratedPDFField__c');
        if (generatedFields != null) {
            List<String> ele = generatedFields.split(',');
            return ele.contains(apiName);
        }
        return false;
    }


    public QIS_Report__c QIS_Reports {get; set;}
    public Repair__c repairs {get; set;}
    // 是否为修理
    public Boolean isRepair {get; set;}

    // api名称    
    public String api {get; set;}
    // id
    public String objId {get; set;}

    // 字段
    public String field {get; set;}
    // 标签
    public String label {get; set;}

    // 
    public static List<ImgObj> ImgObjs {get; set;}

    public RepairAndQISToPDFController(){
        String fileName = '';
        String url = '';
        api = ApexPages.currentPage().getParameters().get('api');
        objId = ApexPages.currentPage().getParameters().get('id');

        if ('repair'.equals(api)) { 
            isRepair = true;
            repairs = [select id,name,ProblemDescription__c,GeneratedPDFField__c from Repair__c where id = :objId];
            setImgSrcs(repairs, 'ProblemDescription__c');
        }else {
            field = ApexPages.currentPage().getParameters().get('field');
            String sql = 'select id,name,GeneratedPDFField__c,'+ field;
            sql += ' from QIS_Report__c where id = \''+objId+'\'';

            label = Schema.getGlobalDescribe().get('QIS_Report__c').getDescribe().fields.getMap().get(field).getDescribe().getLabel();
            QIS_Reports = Database.query(sql);
            setImgSrcs(QIS_Reports, field);

        }

    }

    public class ImgObj{
        public String imgSrc {get; set;}
        public String height {get; set;}
    }

}