import { getSelectedAlgorithm } from './utils.js';
import {
  secretInput,
  secretBase64Checkbox,
} from '../dom-elements.js';

import log from 'loglevel';
import tippy from 'tippy.js';
import b64u from 'base64url';

export function minSecretLengthCheck(event) {
  const alg = getSelectedAlgorithm();
  if(alg.indexOf('HS') !== 0) {
    log.error(`Secret input tooltip handler for wrong algorithm: ${alg}`);
    return;
  }

  const algBits = parseInt(alg.substr(2));
  const inputBits = secretBase64Checkbox.checked ?
    b64u.decode(secretInput.value).length * 8 :
    Buffer.from(secretInput.value).length * 8;

  if(inputBits < algBits) {
    if(!secretInput._tippy.state.visible) {
      secretInput._tippy.show();
    }
  } else {
    secretInput._tippy.hide();
  }
}

export function setupSecretLengthTooltip() {
  tippy(secretInput, {
    trigger: 'manual',
    placement: 'right',
    arrow: true,
    arrowTransform: 'scale(0.75)',
    size: 'large'
  });
}

@@ -30,17 +30,17 @@
  %7D from 
-'
+%22
 ./utils.
@@ -41,17 +41,17 @@
 utils.js
-'
+%22
 ;%0Aimport
@@ -52,18 +52,16 @@
 import %7B
-%0A 
  secretI
@@ -65,18 +65,16 @@
 etInput,
-%0A 
  secretB
@@ -90,18 +90,17 @@
 kbox
-,%0A
+ 
 %7D from 
-'
+%22
 ../d
@@ -113,17 +113,17 @@
 ments.js
-'
+%22
 ;%0A%0Aimpor
@@ -137,17 +137,17 @@
 rom 
-'
+%22
 loglevel
 ';%0Ai
@@ -142,17 +142,17 @@
 loglevel
-'
+%22
 ;%0Aimport
@@ -167,17 +167,17 @@
 rom 
-'
+%22
 tippy.js
 ';%0Ai
@@ -172,17 +172,17 @@
 tippy.js
-'
+%22
 ;%0Aimport
@@ -192,17 +192,17 @@
 4u from 
-'
+%22
 base64ur
@@ -202,17 +202,17 @@
 ase64url
-'
+%22
 ;%0A%0Aexpor
@@ -252,16 +252,18 @@
 vent) %7B%0A
+  
   const 
@@ -294,18 +294,21 @@
 hm();%0A  
+  
 if
+ 
 (alg.ind
@@ -316,12 +316,12 @@
 xOf(
-'HS'
+%22HS%22
 ) !=
@@ -323,24 +323,28 @@
 %22) !== 0) %7B%0A
+    
     log.erro
@@ -414,16 +414,20 @@
     
+    
 return;%0A
   %7D%0A
@@ -426,15 +426,19 @@
 rn;%0A
+  
   %7D%0A%0A  
+  
 cons
@@ -474,16 +474,18 @@
 tr(2));%0A
+  
   const 
@@ -535,19 +535,25 @@
     
+    
 b64u.
-decode
+toBuffer
 (sec
@@ -581,16 +581,20 @@
 h * 8 :%0A
+    
     Buff
@@ -633,20 +633,23 @@
 h * 8;%0A%0A
+  
   if
+ 
 (inputBi
@@ -668,18 +668,23 @@
 ) %7B%0A    
+    
 if
+ 
 (!secret
@@ -715,24 +715,30 @@
 le) %7B%0A      
+      
 secretInput.
@@ -756,18 +756,24 @@
 ();%0A    
+    
 %7D%0A
+  
   %7D else
@@ -775,16 +775,20 @@
  else %7B%0A
+    
     secr
@@ -810,16 +810,18 @@
 hide();%0A
+  
   %7D%0A%7D%0A%0Ae
@@ -864,16 +864,18 @@
 tip() %7B%0A
+  
   tippy(
@@ -889,16 +889,20 @@
 nput, %7B%0A
+    
     trig
@@ -910,18 +910,22 @@
 er: 
-'
+%22
 manual
-'
+%22
 ,%0A
+    
     
@@ -939,17 +939,21 @@
 nt: 
-'
+%22
 right
-'
+%22
 ,%0A
+    
     
@@ -965,24 +965,28 @@
 : true,%0A    
+    
 arrowTransfo
@@ -989,17 +989,17 @@
 nsform: 
-'
+%22
 scale(0.
@@ -1005,11 +1005,15 @@
 .75)
-'
+%22
 ,%0A
+    
     
@@ -1022,20 +1022,22 @@
 ze: 
-'
+%22
 large
-'%0A
+%22,%0A  
   %7D);%0A%7D
-%0A

Fix Base64 encoded secret length check