<?php

namespace cab\ext\cryptopro;

class i_cryptopro_sign
{
     static $rec_doc ;
     static $rec_account ;
     static $sign_uid ;

     public static function panel_sign($account_id,$sign_uid,$options=[])
       {

           if ($options['doc_id']) static::$rec_doc=DOCS()->get_doc_by_id($options['doc_id']) ;
           if ($options['rec_doc']) static::$rec_doc=$options['rec_doc'] ;
           static::$rec_account=ACCOUNTS()->get_member_by_id($account_id) ;
           static::$sign_uid=$sign_uid ;

           LOG_JSON('debug_signature')->reg('get_page_sign','Обращение к i_cryptopro_sign::panel_sign');
           LOG_JSON('debug_signature')->flush('debug_signature_'.static::$sign_uid,['reg_log'=>1,'reffer'=>static::$rec_doc['_reffer'],'member_id'=>$account_id,'personal_id'=>static::$rec_doc['personal_id']]);


           $cert = static::$rec_account['certificate'];


           // damp_array($cert);
           // если в профиле пользователя храниться информация по тестовой ЭЦП - удалям номер = информации по ЭЦП нет
           // if ($cert['IssuerName']=='Эмуляция ЭЦП') unset($cert['Thumbprint']);

           if (static::$rec_doc['pkey'])
           {
               ?><h3>Подписываемый документ</h3><?
               echo static::$rec_doc['obj_name'].' ('.static::$rec_doc['doc_name'].'), формат '.static::$rec_doc['code'].', создан '.static::$rec_doc['_date_create'].'<br>';
               ?>
               <script type="text/javascript">
                   var doc_url="<?echo (_CUR_ROOT_DIR_NAME=='cab')? static::$rec_doc['__href_cab']:static::$rec_doc['__href_window']?>";
                   sign_log("1.Открыт интерфейс подписи документа, id: <?echo static::$rec_doc['pkey']?>, URL:"+doc_url) ;
               </script><?
           }
           else echo '<h3>Выберите документ для подписи</h3><input  id="openFileButton"  type="file" onchange="openFile(event)"  class="inputfile inputfile-1"/>';

           ?><br><br><h3>Сертификат для подписи документа:</h3><?
           if ($cert['Thumbprint']) static::panel_cert_info($cert);

           // Выбор версии панели списка серитификатов
           static::new_panel_select_ecp($cert);

       }

    private static function text_banner($text){echo '<div class="green" style="background: #f6100d3b !important;padding: 7px 15px;font-size: 11px;font-weight: 600;color: #e10808;">'.$text.'</div>';}


    private static function new_panel_select_ecp($cert)
       {
           $url=_PATH_TO_SITE.'/cab/setting/member/'.static::$rec_account['pkey'].'/sert/?block=3' ;
           if (static::$rec_account['evulate_ECP']) static::text_banner('Включен режим эмуляции ЭЦП. Для отключения этого режима необходимо перейти в <a style="color:#000" href="'.$url.'">Настройки</a>');
           if($GLOBALS['LS_evulate_ECP']==1) static::text_banner('Включен режим эмуляции ЭЦП по умолчанию. Для отключения этого режима необходимо перейти в <a target="_blank" style="color:#000" href="'.$url.'cab/cryptopro/setting/">Настройки</a>');
           ?>
           <br>
           <div class="setting_body_container" style="margin: 0px;padding: 0px;border: 0px;width: 100%;">
               <div class="edge">
                   <div id="boxdiv" style="display:none"><span id="errorarea">У вас отсутствуют личные сертификаты.</span></div>
               </div>
               <div>
                   <div id="panel_select_sert" class="select_cert">
                       <select size="4" name="CertListBox" id="CertListBox" style="height: fit-content !important;margin: 0px 0 5px 0;"></select>
                       <div id="cert_info" class="edge" name="CertInfo" style="display:none;margin: 0px;margin-top:20px;padding: 10px 0px;background: #f3f3f3;border-radius: 8px;margin-bottom: 15px;">
                           <h4>Информация о выбранном сертификате</h4>
                           <p class="info_field" id="subject"></p>
                           <p class="info_field" id="issuer"></p>
                           <p class="info_field" id="from"></p>
                           <p class="info_field" id="till"></p>
                           <p class="info_field" id="provname"></p>
                           <p class="info_field" id="privateKeyLink"></p>
                           <p class="info_field" id="algorithm"></p>
                           <p class="info_field" id="status"></p>
                           <p class="info_field" id="location"></p>
                       </div>
                   </div>
               </div>
           </div>
           <div class="clear"></div>


           <div class="sky-form">
               <button id="exec_sign" class="button left" style="margin-right:10px;<?if (!$cert['Thumbprint']) echo 'display:none;'?>" cert_id="<?echo ($cert['Thumbprint'])?:''?>" doc_id="<?echo (static::$rec_doc['pkey'])?:0;?>">Подписать документ</button>
               <button id="apply_sert" class="button select_cert">Выбрать сертификат</button>
               <!--<button id="cancel_apply_sert" class="button select_cert">Отмена</button>-->
               <button id="select_other_sert" class="button sign_doc">Выбрать другой сертификат</button>
               <? if($cert['Thumbprint']){ ?><button id="show_ext_info" class="button sign_doc" ff="0">Полная информация</button><?}?>
               <? if(static::$rec_doc['__href']){ ?><button class="v1 button" id=button_go_back href="<?echo (_CUR_ROOT_DIR_NAME=='cab')? static::$rec_doc['__href_cab']:static::$rec_doc['__href_window']?>">Вернуться в документ</button><?}?>
               <div class="clear"></div>
           </div>

           <div id="cert_infos" style="display:none;margin:0 0 15px 0;border:1px solid #aad8be;background:rgba(167, 209, 189, 0.62);padding:20px;"></div>
           <div id="sign_comment" class="sign_doc_exec">
               <h3>Ход подписи документа</h3>
               <textarea id="sign_comment_text" style="width:100%;height:100px;font-size:10px;"></textarea>
           </div>
           <div id="sign_result"></div>
           <?
           LOG_JSON('debug_signature')->reg('get_page_sign','Сформирована страница подписи докумениа<br>');
           LOG_JSON('debug_signature')->flush('debug_signature_'.static::$sign_uid,['reg_log'=>1,'reffer'=>static::$rec_doc['_reffer'],'member_id'=>MEMBER()->id]);
           ?>
           <script  language="javascript">
							 $j(document).ready(function()
							 {
										list_box_size();
										// Загрузка списка сертификатов после инициализации CryptoPro
										$j('body').on('cadesplugin_cp_versions', function(event, cp_params) {
												console.log('panel_select_user_certificate: cadesplugin_cp_versions');
												FillCertList_Async('CertListBox');
										});
								});

               function get_info_select_sert(data){
                   console.log(data);
                   document.getElementById('apply_sert').setAttribute('data-selecthash', data['hash']);
                   $j('#apply_sert').removeAttr('disabled');
               }

               function list_box_size(){
                   let select = document.getElementById('CertListBox');
                   if (select.length > 0) {
                       select.size = select.length; // Устанавливаем высоту по количеству сертификатов
                   }
                   setTimeout(() => {list_box_size()}, 100);
               }

               $j(document).ready(function() {list_box_size();});

               $j('button#apply_sert').click(function() {
                   // отправляем по ajax информацию по выбранному сертификат для сохранения в профиле пользователя
                   // далее страница будет перезагружена
                   let hash = document.getElementById('apply_sert').getAttribute('data-selecthash');
                   //send_ajax_request({cmd:'cryptopro/save_sert_to_account_prepare'});
                   ESMO_save_cur_certificate_params(hash,{cmd:'cryptopro/save_sert_to_account',account_id:<?echo MEMBER()->id?>});
               });

               <?if ($cert['Thumbprint']) {?>$j('.sign_doc').show() ; $j('.select_cert').hide() ; $j('.sign_doc_exec').hide() ;<?}
               else                       {?>$j('.sign_doc').hide() ; $j('.select_cert').show() ; $j('.sign_doc_exec').hide() ;<?}
               ?>

               $j('button#select_other_sert').click(function() {
                   $j('.sign_doc').hide();
                   $j('.sign_doc_exec').hide();
                   $j('.select_cert').show();
               });

               $j('button#cancel_apply_sert').click(function(){
                   $j('.sign_doc').show();
                   $j('.select_cert').hide();
                   $j('.sign_doc_exec').hide();
               });

               $j('button#show_ext_info').click(function(){
                   if ($j(this).attr('ff') == 0){
                       $j('table#panel_cur_sert_info tr.ext').show();
                       $j(this).attr('ff',1);
                   }else{
                       $j('table#panel_cur_sert_info tr.ext').hide();
                       $j(this).attr('ff', 0);
                   }
               });

               $j('button#exec_sign').click(function() {
                   var check_sign=($j('#check_sign').is(':checked'))? 1:0;
                   console.log('check_sign on exec_sign='+check_sign) ;
                   sign_log("3. Нажата кнопка подписи документа (onclick) документ # "+$j(this).attr('doc_id')) ;
                   if ($j(this).attr('doc_id')==0){
                       signFile($j(this).attr('cert_id'), check_sign);
                   }else{
                       signDocAfterRequest($j(this).attr('cert_id'),$j(this).attr('doc_id'),check_sign);
                   }
               });

               //$j('#block_main button').attr('disabled','disabled') ;
               $j('#button_go_back').removeAttr('disabled') ;



               var openFile = function (event) {
                   fileContent = undefined;
                   var input = event.target;
                   var reader = new FileReader();
                   reader.readAsDataURL(input.files[0]);
                   reader.onload = function () {
                       var header = ";base64,";
                       var fileData = reader.result;
                       fileContent = fileData.substr(fileData.indexOf(header) + header.length);
                       fileName=openFileButton.value ;
                   };
               };
           </script>
           <?
       }

    public static function panel_plugin_status()
     {   ?><div id="info">
                         <div id="info_msg" style="text-align:center;">
                             <span id="PlugInEnabledTxt">Плагин не загружен</span>
                             <img id="PluginEnabledImg" src="/AddOns/cryptopro/img/red_dot.png" width="10" height="10" alt="Плагин не загружен"/>
                             <br>
                             <span id="PlugInVersionTxt" lang="ru"> </span>
                             <span id="CSPVersionTxt" lang="ru"> </span>
                             <span id="BrowserVers" lang="ru"> </span>
                             <br>
                             <span id="CSPNameTxt" lang="ru"> </span>
                         </div>
                         <div id="boxdiv" style="display:none">
                             <span id="errorarea">У вас отсутствуют личные сертификаты. Обратитесь за помощью к системному администратору</span>
                         </div>
             </div>
             <script type="text/javascript">
                 $j('body').on('click','#BrowserVers',BrowserInfo) ;
                 function BrowserInfo()
                 {   var data={cmd:'BrowserInfo',
                               html:'<strong>Описание браузера:</strong>'+JSON.stringify($j.browser,null,"<br>")+'<br>'+
                                    '<strong>LS_trace_sign_JS:</strong> <?echo $GLOBALS['LS_trace_sign_JS']?><br>'+
                                    '<strong>AsyncMode:</strong> '+AsyncMode+'<br>'+
                                    '<strong>window.allow_firefox_cadesplugin_async:</strong> '+window.allow_firefox_cadesplugin_async+'<br>'+
                                    '<button class="button cancel">Закрыть</button>',
                               title:'Информация по Вашему браузеру',
                              } ;
                     modal_window(data) ;
                 }
             </script>
           <?

     }

    private static function panel_cert_info($cert)
    {	?><table class="basic fz_small fixed left full sign_doc" id="panel_cur_sert_info">
            <tr><th style="width:200px;text-align:left;">Издатель:</th><td style="text-align: left"><?echo $cert['IssuerName']?></td></tr>
            <tr><th style="width:200px;text-align:left;">Владелец:</th><td style="text-align: left"><?echo $cert['SubjectName']?></td></tr>
            <tr><th style="width:200px;text-align:left;">Выдан:</th><td style="text-align: left"><?echo $cert['ValidFromDate']?></td></tr>
            <tr><th style="width:200px;text-align:left;">Действителен до:</th><td style="text-align: left"><?echo $cert['ValidToDate']?></td></tr>
            <tr class="ext"><th style="width:200px;text-align:left;">С/Н сертификата:</th><td style="text-align: left"><?echo $cert['SerialNumber']?></td></tr>
            <tr class="ext"><th style="width:200px;text-align:left;">Отпечаток сертификата:</th><td style="text-align: left"><?echo $cert['Thumbprint']?></td></tr>
            <tr class="ext"><th style="width:200px;text-align:left;">Версия:</th><td style="text-align: left"><?echo $cert['version']?></td></tr>
            <tr class="ext"><th style="width:200px;text-align:left;">Алгоритм ключа:</th><td style="text-align: left"><?echo $cert['algorithm']?></td></tr>
            <tr class="ext"><th style="width:200px;text-align:left;">Криптопровайдер:</th><td style="text-align: left"><?echo $cert['provname']?></td></tr>
            <tr class="ext"><th style="width:200px;text-align:left;">Данные сохранены:</th><td style="text-align: left"><?echo $cert['time_update']?></td></tr>
         </table>
       <?

        $validToDate = strtotime($cert['ValidToDate']);
        $currentDate = time();

        if ($validToDate < $currentDate) {
            echo "<div style='background: #ff000017;color: #f00;padding: 15px;font-size: 16px;font-weight: 600;margin-top: 14px;'>Сертификат просрочен</div>";
        }

    }
}
