//implements Queueable
public with sharing class NFM511Controller implements Queueable {

    public static String status;
    public static String logstr;

    private static final String LOG_TYPE = 'NFM511';

    // public class NFM511 {
    // 	public Gedatas Gedatas;
    // }

    public class AllData {
        public Integer code;
        public ZCData data;
        public String message;
    }

    public class ZCData {
        public Integer total;
        public Integer current;
        public Integer size;
        public Boolean hitCount;
        public Integer pages;
        public Boolean optimizeCountSql;
        public Boolean searchCount;
        public ListItem[] records;
        public Object[] orders;
    }

    public class ListItem {
        public String sfdcCode;        //上传编码
        public String bid;             //标讯 id
        public String title;           //标题
        public String projectNo;       //项目编号
        public String originalUrl;     //原文链接
        public String tenderee;        //归一招标单位
        public String province;        //省
        public String city;            //市
        public String district;        //区
        public String supplier;        //归一中标单位
        public String contractObject;  //标的名称
        public String brand;           //归一品牌名称
        public String brandType;       //品牌类型
        public String speci;           // 归一型号
        public String noticeType ;     //公告类型
        public String progress ;       // 中标进度
        public String oneClass ;       //大类
        public String twoClass ;       //产品线
        public String threeClass ;     //细分品种
        public String hostIf ;         //是否包含主机
        public String fundingSource ;  //资金来源
        public String url ;            //众成链接

        public Integer winningDetailId;  //标注结果 id
        public Integer bidQuantity;  //补全数量
        public Decimal bidUnitPrice;  //补全单价
        public Decimal bidTotalPrice ; //补全总价
        public String projectTotalPrice ;  //项目总价

        public String createTime ; 
        public String modifyTime ; 
        public String publishTime ; //中标日期

        public String projectJudgeId ; //项目id-大包标识 20240105 lt add  project_judge_id
    }

    // 日志rowData的Id
    public String logId; 

    //取众成数据的开始/结束时间
    public static String startTime; 
    public static String endTime; 

    // 无参的构造方法
    public NFM511Controller() {
    }

    // 包含Id的构造方法
    public NFM511Controller(String rowdataId) {
        this.logId = rowdataId;
    }

    // 包含 开始时间/结束时间 的构造方法
    // 文本格式 'yyyy-MM-dd'
    // public NFM511Controller(String startTime1,String endTime1) {
    //     startTime = startTime1;
    //     endTime = endTime1;
    // }

    // 最大值为3，用来作为判断错误的条件（重发三次）
    public static Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);

    // 开始执行
    public void execute(QueueableContext context) {

        Datetime nowDT = Datetime.now();
        String nowStr = nowDT.format('yyyyMMddHHmmss');

        //1 创建日志
        BatchIF_Log__c rowData = new BatchIF_Log__c();
        System.debug('lt123--logId:'+this.logId);
        if (String.isBlank(this.logId)) {
            rowData.Type__c = 'NFM511';
            rowData.RowDataFlg__c = true;
            rowData.MessageGroupNumber__c = nowStr;
            rowData.retry_cnt__c = 0;
            insert rowData;
        } else {
            rowData.Id = this.logId;
        }
        
        BatchIF_Log__c iflog = new BatchIF_Log__c();
        iflog.Type__c = 'NFM511';
        iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c;
        insert iflog;
        System.debug('rowDataId: ' + rowData.Id);
        System.debug('iflogId: ' + iflog.Id);

        //2 执行接口请求
        NFM511Controller.sendRequest(rowData.Id, iflog.Id);
        
    }

    @Future(callout=true)
    public static void sendRequest(String rowDataId, String iflogId) {
        BatchIF_Log__c rowData = [select Id, Name, Log__c, ErrorLog__c, MessageGroupNumber__c, retry_cnt__c
                                  from BatchIF_Log__c where id = :rowDataId ];
        BatchIF_Log__c iflog = [select Id, Name, Log__c, ErrorLog__c, MessageGroupNumber__c, retry_cnt__c
                                  from BatchIF_Log__c where id = :iflogId ];
        BatchIF_Transfer__c tokeninfo = null;
        BatchIF_Transfer__c indexinfo = null;
        Boolean updateToken = false; // 是否更新token
        Boolean doFuture = false; // 是否执行511future

        //startTime/EndTime  转送表  start
        // BatchIF_Log__c iflog1 = new BatchIF_Log__c();
        // iflog1.Type__c = 'NFM511Time';
        // iflog1.Log__c = 'timeCtroller start\n';
        // iflog1.ErrorLog__c = '';
        // insert iflog1;

        Map<String, String> transferMap = new Map<String, String>();
        List<BatchIF_Transfer__c> transferList = [
                                select Table__c,
                                       Column__c,
                                       External_value__c,
                                       Internal_value__c
                                from BatchIF_Transfer__c
                                where Dropped_Flag__c = false
                                and Table__c = 'NFM511'];
        for (BatchIF_Transfer__c t : transferList) {
        transferMap.put(t.Column__c, t.Internal_value__c);
        }
        System.debug('20231009---transferMap:'+transferMap);
        System.debug('20231009---startTime表:'+transferMap.get('StartTime'));
        System.debug('20231009---EndTime表:'+transferMap.get('EndTime'));

        startTime = transferMap.get('StartTime');
        endTime = transferMap.get('EndTime');
        // if (!transferMap.containsKey('StartTime') || !transferMap.containsKey('EndTime')) { 
        //     iflog1.ErrorLog__c += '请检查转送表\n';
        // }
        //startTime/EndTime  转送表  end

        Datetime nowDT = Datetime.now();
        Long nowM = Long.valueOf(nowDT.format('yyyyMMddHHmm'));
        Long nowD = Long.valueOf(nowDT.format('yyyyMMdd'));
        System.debug('20231009---startTime:'+startTime);
        System.debug('20231009---endTime:'+endTime);
        String yestoday = String.isBlank(startTime) ? system.now().format('yyyy-MM-dd') + '%2000:00:00' : startTime + '%2000:00:00';
        String totoday = String.isBlank(endTime) ? system.now().format('yyyy-MM-dd') + '%2023:59:55' : endTime + '%2023:59:55';
        System.debug('20231009---yestoday:'+yestoday);
        System.debug('20231009---totoday:'+totoday);

        try {
            //1 获得token和当前任务页数数据
            String token;
            String loginNo;
            String systemId;
            String pindex;
            tokeninfo = [Select ID, NFM501_Token__c,LastModifiedDate FROM BatchIF_Transfer__c
                                        Where Table__c = 'NFM511Token' limit 1];
            indexinfo = [Select ID, Internal_Value__c,LastModifiedDate FROM BatchIF_Transfer__c
                                        Where Table__c = 'NFM511GainEndTime' limit 1];
            Long lastModM = tokeninfo == null ? 0 : Long.valueOf(tokeninfo.LastModifiedDate.format('yyyyMMddHHmm'));
            Long lastModD = tokeninfo == null ? 0 : Long.valueOf(tokeninfo.LastModifiedDate.format('yyyyMMdd'));
            String[] tokeninfos = null;
            //2 判断是否要取新token
            if (nowM - lastModM > 8) {
                String tokennew = getZCToken();
                System.debug('token: ' + tokennew);
                Map<String, Object> tr = (Map<String, Object>) JSON.deserializeUntyped(tokennew);
                System.debug('test20231007---tr: ' + tr);
                Map<String, Object> retdata = (Map<String, Object>) tr.get('data');
                String strtokeninfo = (String) retdata.get('access_token') + ';' + retdata.get('loginNo') + ';' + retdata.get('systemId');
                if (tokeninfo == null) {
                    tokeninfo = new BatchIF_Transfer__c();
                    tokeninfo.Table__c = 'NFM511Token';
                }
                tokeninfo.NFM501_Token__c = strtokeninfo;
                updateToken = true;
                tokeninfos = strtokeninfo.split(';');
            } else {
                tokeninfos = tokeninfo.NFM501_Token__c.split(';');
            }
            token = tokeninfos[0];
            loginNo = tokeninfos[1];
            systemId = tokeninfos[2];
            pindex = indexinfo == null || String.isBlank(indexinfo.Internal_Value__c) || (nowD - lastModD > 0) ? '1' : indexinfo.Internal_Value__c;
            // token和页数信息写入执行日志
            iflog.Log__c = 'token: ' + token + '\n';
            iflog.Log__c += 'loginNo: ' + loginNo + '\n';
            iflog.Log__c += 'systemId: ' + systemId + '\n';
            iflog.Log__c += 'pindex: ' + pindex + '\n';
            // 获取数据日志
            String datalog = sendToZCRet(token, loginNo, systemId, pindex, yestoday,totoday);
            rowData.Log__c = datalog;
            AllData metaData = (AllData) JSON.deserializeStrict(datalog, AllData.class);

            if (metaData.code == 200) {
                doFuture = true;
                if (metaData.data.pages > Integer.valueOf(pindex)) {
                    System.enqueueJob(new NFM511Controller());
                }
            }

            System.debug('lt123-rowData.id:'+rowData.id);
            System.debug('lt123-iflog.id:'+iflog.id);
            // NFM511FutureController.main(rowData.id,iflog.Id,false);
            // System.enqueueJob(new NFM511FutureController(rowData.id),1);

            if (indexinfo == null) {
                indexinfo = new BatchIF_Transfer__c();
                indexinfo.Table__c = 'NFM511GainEndTime';
            }
            indexinfo.Internal_Value__c = String.valueOf(Integer.valueOf(pindex) + 1);
        } catch (Exception ex) {
            // Database.rollback(sp);
            System.debug('ex.getlinenumber()------'+ex.getlinenumber());
            iflog.ErrorLog__c = '511抛出异常：' + ex.getMessage() + '\n'
                                + ex.getStackTraceString() + '\n' + iflog.ErrorLog__c;
            rowData.retry_cnt__c += 1;

            System.debug('lt123-rowData.retry_cnt__c:'+rowData.retry_cnt__c);
            
            if (rowData.retry_cnt__c == batch_retry_max_cnt) {
                rowData.ErrorLog__c = '511抛出异常：' +
                        ex.getMessage() + '\n' + ex.getStackTraceString()
                        + '\n' + 
                        '错误次数已经超过自动收信设定的最大次数，请手动收信';
            } else {
                // rowData.ErrorLog__c = 'error:' + ex.getMessage() + '\n' + ex.getStackTraceString()
                // + '\n' ;
                System.enqueueJob(new NFM511Controller(rowData.Id), 1);
            }
        } finally {
            update iflog;
            update rowData;
            if (updateToken) {
                upsert tokeninfo;
            }
            upsert indexinfo;
            if (doFuture) {
                NFM511FutureController.main(rowData.id,iflog.Id,false);
            }
        }
    }

    // 获得众成token
    public static String getZCToken() {
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        HTTPResponse res;
        String resb;
        // System.debug('endpoint: ' + NFMUtil.NFM511_TOKEN_ENDPOINT);
        // System.debug('username: ' + NFMUtil.NFM511_USERNAME);
        // System.debug('password: ' + NFMUtil.NFM511_PASSWORD);
        String url = NFMUtil.NFM511_TOKEN_ENDPOINT;
        url += '?username=' + NFMUtil.NFM511_USERNAME;
        url += '&password=' + NFMUtil.NFM511_PASSWORD;
        System.debug('token url: ' + url);
        req.setMethod('GET');
        req.setEndpoint(url);
        // req.setEndpoint(NFMUtil.NFM511_TOKEN_ENDPOINT);
        // req.setHeader('username', NFMUtil.NFM511_USERNAME);
        // req.setHeader('password', NFMUtil.NFM511_PASSWORD);
        // req.setBody('');
        res = http.send(req);
        resb = res.getBody();
        System.debug('511 get token:' + resb);

        return resb;
    }

    // 获得众成数据
    public static String sendToZCRet(String token, String loginNo, String systemId, string pageIndex, String updStart, String updEnd) {

        // 发送接口
        Http http2 = new Http();
        HttpRequest req2 = new HttpRequest();
        HTTPResponse res2;
        String resb2;

        String url = NFMUtil.NFM511_DATA_ENDPOINT;
        url += '?loginNo=' + loginNo;
        url += '&systemId=' + systemId;
        url += '&pageIndex=' + pageIndex;
        url += '&pageSize=10';
        url += '&updateTimeStart=' + updStart;
        url += '&updateTimeEnd=' + updEnd;
        // url += '&updateTimeStart=2023-10-09%2017:44:00';
        // url += '&updateTimeEnd=2023-10-09%2017:45:00';

        System.debug('20231009---url:'+url);

        req2.setTimeout(110000);
        req2.setMethod('GET');
        req2.setEndpoint(url);
        // req2.setEndpoint(NFMUtil.NFM511_DATA_ENDPOINT);
        req2.setHeader('Authorization', 'Bearer ' + token);
        // req2.setHeader('loginNo', loginNo);
        // req2.setHeader('systemId', systemId);
        // req2.setHeader('Content-Type', 'application/json');
        // req2.setHeader('pageIndex', pageIndex);
        // req2.setHeader('pageSize', '20');
        // req2.setHeader('updateTimeStart', updStart); // 格式 '2023-04-01 00:00:00'
        // req2.setHeader('updateTimeEnd', updEnd);
        // req2.setBody('');
        System.debug('20231009---res2---1:'+res2);
        res2 = http2.send(req2);
        System.debug('20231009---res2--2:'+res2);
        resb2 = res2.getBody();
        System.debug('20231009---resb2:'+resb2);
        return resb2;
    }
    //add by allen 拆分部署ali生产
    public void testMock(){
        Integer i = 0;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }

}