<!DOCTYPE html>
<html dir="rtl">
<head>
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <title>Page Title</title>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
     <script src="./js/Dastine-Config.js?random=<%=DateTime.Now.Ticks.ToString()%>"></script>
     <script src="./js/main.js"></script>

     <link href="./assest/css/bootstrap.min.css" rel="stylesheet" >
    <script src="./assest/js/bootstrap.bundle.js" ></script>
    <script>
        const urlParams = new URLSearchParams(window.location.search);
        const id = urlParams.get('ID');
        const typeFile = urlParams.get('Type');
        const hospCode = urlParams.get('Code');
        let FilePDF=null;
        function allert(Type,Message){
            if(Type=="err"){
                if(document.getElementById("allertBody")){
                    if (document.getElementById("allertBody").classList.contains("alert-success")) {
                    document.getElementById("allertBody").classList.remove("alert-success")
                } 
                document.getElementById("allertBody").classList.add("alert-danger")
                document.getElementById("allertBody").innerHTML=Message;
                }
                else{
                    document.getElementById("alert").innerHTML=
                `<div class="alert alert-danger" role="alert" id="allertBody">
                    `+Message+
                ` </div>`
                } 
            }
            else{
                if(document.getElementById("allertBody")){
                    if (document.getElementById("allertBody").classList.contains("alert-danger")) {
                    document.getElementById("allertBody").classList.remove("alert-danger")
                }
                document.getElementById("allertBody").classList.add("alert-success")
                document.getElementById("allertBody").innerHTML=Message;
                }else{
                    document.getElementById("alert").innerHTML=
                `<div class="alert alert-success" role="alert" id="allertBody">
                    `+Message+
                ` </div>`
                }
            }
        }
        function sign(){
            document.getElementById("alert").innerHTML='';
            const GetCertificate = new Promise((resolve, reject) => {
                if(Dastine.isInstalled) {
                try
                {
                    var issuer = '';
					var keyUsages = '';
                    Dastine.SelectCertificateFromWindowsByUI( issuer,keyUsages,function(event) {
                    resolve(event.data.Result) 					
                    });
                }
                catch(e)
                {
                    reject(e);			
                }   
            }else {
            if(Dastine.errorMessage == 'DASTINE_NOT_INSTALLED')
                reject(Dastine.errorMessage + '\n Get it from:\n' + DastineConfig.hostDownloadLink);			
            else
                reject(Dastine.errorMessage );						
            }			
            });
            const ReadSelectedCertificate=new Promise((resolve,reject)=>{
                if(Dastine.isInstalled) {
					try
					{
						Dastine.GetSelectedCertificate(function(event) {
							resolve(event.data.Result)					
						});
					}
					catch(e)
					{
						reject(e);
					}
				}else {
				if(Dastine.errorMessage == 'DASTINE_NOT_INSTALLED')
					reject(Dastine.errorMessage + '\n Get it from:\n' + DastineConfig.hostDownloadLink);			
				else
					reject(Dastine.errorMessage );						
				}	
            })
            const CMSSign= (cmsBase64)=>{
                return new Promise((resolve,reject)=>{
				var hash = "SHA1"
				var attach = false;
				
				if(Dastine.isInstalled) {
					try
					{
						Dastine.CmsSign(cmsBase64, attach, function(event) {
                            resolve	(event.data.Result)					
						},hash); 
					}
					catch(e)
					{
						reject(e);
					}
				}else {
				if(Dastine.errorMessage == 'DASTINE_NOT_INSTALLED')
					reject(Dastine.errorMessage + '\n Get it from:\n' + DastineConfig.hostDownloadLink);			
				else
                reject(Dastine.errorMessage );						
				}	
            })

            }
            const SendCMS= (ID,signedCMSFile)=>
            {
                return new Promise(async (resolve,reject)=>{
                    const request = new Request(BaseURL+`/ShafaService/api/sign/SaveSignedCMS`, {
                        method: "POST",
                        headers:{
                        'Content-Type': 'application/json',
                        'Access-Control-Allow-Origin': '*',
                        'Access-Control-Allow-Methods': 'GET, POST, PATCH, PUT, DELETE, OPTIONS',
                        'Access-Control-Allow-Headers':'Origin, Content-Type, X-Auth-Token',
                        'Authorization': 'Bearer '+localStorage.getItem('access_token')
                            },
                        body: JSON.stringify({
                        'id': id,
                        'cmsSigned': signedCMSFile,
                        }),
                    });

                     await fetch(request)
                    .then((response) => response.json())
                    .then((data) => {
                        if(data.result.isSuccess==true){
                            resolve(data);
                        }else{
                            resolve(data);
                        }
                    });
                  
            })
            }          
            const SendInformationForDigest= (certificate)=>
            {
                return new Promise(async (resolve,reject)=>{
                    const request = new Request(BaseURL+`/ShafaService/api/sign/DigestPDF`, {
                        method: "POST",
                        headers:{
                        'Content-Type': 'application/json',
                        'Access-Control-Allow-Origin': '*',
                        'Access-Control-Allow-Methods': 'GET, POST, PATCH, PUT, DELETE, OPTIONS',
                        'Access-Control-Allow-Headers':'Origin, Content-Type, X-Auth-Token',
                        'Authorization': 'Bearer '+localStorage.getItem('access_token')
                            },
                        body: JSON.stringify({
                        'Id': id,
                        'HospCode': localStorage.getItem("hospCode"),
                        'PublicKey': certificate,
                        'PdfData':localStorage.getItem("Base64File"),
                        'PersCode':localStorage.getItem("PersCode"),
                        'ImageDataUrl':localStorage.getItem("signPersImage")
                        }),
                    });
                     await fetch(request)
                    .then((response) => response.json())
                    .then((data) => {
                        if(data.result.isSuccess==true){
                            resolve(data);
                        }else{
                            resolve(data);
                        }
                    });
                  
            })
            }
            const VaidationCertificate= (certificate)=>
            {
                return new Promise(async (resolve,reject)=>{
                    const request = new Request(BaseURL+`/ShafaService/api/sign/ValidationCertificate`, {
                        method: "POST",
                        headers:{
                        'Content-Type': 'application/json',
                        'Access-Control-Allow-Origin': '*',
                        'Access-Control-Allow-Methods': 'GET, POST, PATCH, PUT, DELETE, OPTIONS',
                        'Access-Control-Allow-Headers':'Origin, Content-Type, X-Auth-Token',
                        'Authorization': 'Bearer '+localStorage.getItem('access_token')
                            },
                        body: JSON.stringify({
                        'id': id,
                        'hospCode': localStorage.getItem("hospCode"),
                        'publicKey': certificate,
                        'signedDigest': '',
                        'digestDatetime': '',
                        'pdfFile':localStorage.getItem("Base64File"),
                        'persCode':localStorage.getItem("PersCode"),
                        'signImage':localStorage.getItem("signPersImage")
                        }),
                    });

                     await fetch(request)
                    .then((response) => response.json())
                    .then((data) => {
                        if(data.result.isSuccess==true){
                            resolve(data);
                        }else{
                            resolve(data);
                        }
                    });
                  
            })
            }
            const SignDigest=((digesString)=>{
                return new Promise((resolve,reject)=>{
				var hash = 'SHA1';
				if(Dastine.isInstalled) {
					try
					{
						Dastine.Sign(digesString, hash, function(event) {
							resolve(event.data.Result);				
						});                   
					}
					catch(e)
					{
						reject(e);
					}
				}else {
				if(Dastine.errorMessage == 'DASTINE_NOT_INSTALLED')
                reject(Dastine.errorMessage + '\n Get it from:\n' + DastineConfig.hostDownloadLink);			
				else
                reject(Dastine.errorMessage );						
				}
            })
            })
            const SendDigestToPutPDF= (SignedDigest,certificate,digestDateTime)=>
            {
                return new Promise(async (resolve,reject)=>{
                    const request = new Request(BaseURL+`/ShafaService/api/sign/putSignPDF`, {
                        method: "POST",
                        headers:{
                        'Content-Type': 'application/json',
                        'Access-Control-Allow-Origin': '*',
                        'Access-Control-Allow-Methods': 'GET, POST, PATCH, PUT, DELETE, OPTIONS',
                        'Access-Control-Allow-Headers':'Origin, Content-Type, X-Auth-Token',
                        'Authorization': 'Bearer '+localStorage.getItem('access_token')
                            },
                        body: JSON.stringify({
                        'id': id,
                        'hospCode': localStorage.getItem("hospCode"),
                        'publicKey': certificate,
                        'signedDigest': SignedDigest,
                        'digestDatetime': digestDateTime,
                        'pdfFile':localStorage.getItem("Base64File"),
                        'persCode':localStorage.getItem("PersCode"),
                        'signImage':localStorage.getItem("signPersImage")
                        }),
                    });
                    
                     await fetch(request)
                    .then((response) => response.json())
                    .then((data) => {
                        if(data.result.isSuccess==true){
                            resolve(data);
                        }else{
                            resolve(data);
                        }
                    });
                  
            })
            }
            GetCertificate
            .then(result => {
                if(result=='0'){
                    // if(typeFile==1){
                        ReadSelectedCertificate.then(certificate=>{
                            if(certificate.length>10){
                                SendInformationForDigest(certificate).then(digest=>{
                                if(digest.result.isSuccess==true && digest.content.status==1){
                                    SignDigest(digest.content.digestPDF).then(signedDigest=>{
                                    if(signedDigest.length>10){
                                        SendDigestToPutPDF(signedDigest,certificate,digest.content.dateTime).then(data=>{
                                            if(data.result.isSuccess==true && data.content.status==1){
                                                FilePDF=` <iframe class="embed-responsive-item" id="test" width="100%" height="450" allowfullscreen="" src="data:application/pdf;base64,`+data.content.signedPDF+`" </iframe>`;
                                                document.getElementById('PDFFile').innerHTML=FilePDF;
                                                allert("success","امضا سند با موفقیت انجام شد.")

                                            }else{
                                                allert("err",data.result.Message +'\n'+data.result.messageDetail)
                                            }
                                    }).catch(error=>{
                                    console.log(error)
                                    allert("err",error)
                                    })
                                    }else{
                                        allert("err","امضا سند با خطا مواجه شد لطفا مجدد تلاش کنید")
                                    }
                                }).catch(error=>{
                                    console.log(error)
                                    if(error=="WAITING_FOR_DASTINE_SERVICE"){
                                    allert("err","اگر نرم افزار امضای سلامت را دارید لطفا آن را باز کرده و منتظر بمانید تا اعلان آن ظاهر شود سپس روی آن کلیک کنید.");
                                    }else if(error==""){
                                        allert("err","نرم افزار امضای سلامت نصب نیست "+ '\n لطفا آن را دانلد و نصب نمایید' );
                                    }else{
                                        allert("err",error);
                                    }
                                })
                                }else{
                                    allert("err",digest.result.Message +'\n'+digest.result.messageDetail)                            
                                    // document.getElementById("ResultMessage").value=digest.result.messageDetail;
                                }
                            
                        }).catch(error=>{
                           console.log(error)
                           allert("err",error)                            
                        })
                            }else{
                                allert("err","هیچ گواهی انتخاب نشده است")
                            }
                    }).catch(error=>{
                        if(error=="WAITING_FOR_DASTINE_SERVICE"){
                        allert("err","اگر نرم افزار امضای سلامت را دارید لطفا آن را باز کرده و منتظر بمانید تا اعلان آن ظاهر شود.")
                        }else if(error==""){
                        allert("err","نرم افزار امضای سلامت نصب نیست "+ '\n لطفا آن را نصب کنید')
                        }else{
                        allert("err",error)                            
                        }
                    })
                    // }
                    // else if(typeFile==2){
                    //     ReadSelectedCertificate.then(certificate=>{
                    //         if(certificate.length>10){
                    //             VaidationCertificate(certificate).then(CMSInfo=>{
                    //             if(CMSInfo.result.isSuccess==true && CMSInfo.Content.status==1){
                    //                 CMSSign(CMSInfo.Content.cmsFile).then(resultCMS=>{
                    //                     alert(resultCMS)
                    //                     if(resultCMS.length>10){
                    //                         SendCMS(id,resultCMS).then(result=>{
                    //                             if(result.result.isSuccess==true && result.Content.status==1){
                    //                                 alert("امضا سند با موفقیت انجام شد.")
                    //                                 document.getElementById("ResultMessage").value="امضا سند با موفقیت انجام شد.";
                    //                             }else{
                    //                                 alert(result.result.Message);
                    //                                 document.getElementById("ResultMessage").value=data.result.messageDetail;
                    //                             }
                    //                         }).catch(eerror=>{
                    //                             console.log(error)
                    //                         })
                    //                     }else{
                    //                         alert("امضا سند با فرمت CMS با خطا مواجه شد لطفا مجدد تلاش کنید")
                    //                         document.getElementById("ResultMessage").value="امضا سند با فرمت CMS با خطا مواجه شد لطفا مجدد تلاش کنید";
                    //                     }
                    //                 }).catch(error=>{ 
                    //                     console.log(error)
                    //                 })
                    //             }else{
                    //                 alert(CMSInfo.result.Message);
                    //                 document.getElementById("ResultMessage").value=CMSInfo.result.messageDetail;
                    //             }
                            
                    //     }).catch(error=>{
                    //         console.log(error)
                    //     })
                    //         }else{
                    //             alert("هیچ گواهی انتخاب نشده است");
                    //         }
                    // }).catch(error=>{
                    //     console.log(error)
                    // })
                    // }
                }else if(result=='18'){
                    allert("err","هیچ گواهی انتخاب نشده است")

                }else {
                    allert("err",result)
                }
                
            })
            .catch(error => {
                if(error=="WAITING_FOR_DASTINE_SERVICE"){
                    allert("err","اگر نرم افزار امضای سلامت را دارید لطفا آن را باز کرده و منتظر بمانید تا اعلان آن ظاهر شود. \n در غیر این صورت نرم افزار امضای سلامت را دانلود و نصب نمایید")
                }else if(error==""){
                    allert("err","لطفا نرم افزار امضای سلامت را در تلفن همراه خود نصب نمایید")
                }else{
                    allert("err",error)
                }
                allert("err",error)

            });
        }
     </script>
</head>
<body onload="loadInformation()">
    <script src="./js/Dastine.js"></script>
   
    <div class="container">
        <div class="row d-flex flex-row justify-content-center">
            <div class="col-12 col-md-6 p-2 align-item-center top-0 end-25">
                <div class="text-center " id="alert" >
                                
                </div>
            </div>
        </div>
        <div class="row m-2" height="100%">
            <div class="col-12 col-md-8 p-2 m-auto  text-center justify-content-center" id="SignForm">
                <form class="border p-2 text-center" height="100%" >
                    <div class="my-3">
                      <label for="exampleInputEmail1" class="form-label">آیا مایل به امضای سند زیر هستید؟</label>
                    </div>
                    <button type="button" class="btn btn-warning mb-3" onclick="try{sign()}catch(e){alert(e)}">امضا سند</button>
                    <div class="embed-responsive embed-responsive-4by3 h-100 mx-2 px-2 h-100" id="PDFFile">
                      
                    </div>
                  </form> 
            </div>
        </div>
    </div>
</body>
</html>