import { Injectable } from '@angular/core';
import { AES, enc, pad} from 'crypto-js';

@Injectable({
  providedIn: 'root'
})
export class EncryptionService {


  constructor() { }

   encryptData(request: any): object {
    const fromKey1: number = Math.floor(Math.random() * 5) + 1;
    const fromKey2: number = Math.floor(Math.random() * 5) + 1;
    const key1: string = this.generateRandomKey(16);
    const key2: string = this.generateRandomKey(16);
  
    try {
      let input: string;
      if (typeof request === 'string') {
        input = request; 
      } else {
        input = JSON.stringify(request); 
      }
  
      // Encryption
      const encrypted: string = AES.encrypt(input, enc.Utf8.parse(key1), {
        iv: enc.Utf8.parse(key2),
        padding: pad.Pkcs7
      }).toString();
  
      const dataBeforeKey1 = encrypted.substring(0, fromKey1);
      let encryptedDataSubstring = encrypted.substring(fromKey1);
      const dataBeforeAfterKey2 = encryptedDataSubstring.substring(encryptedDataSubstring.length - fromKey2);
      encryptedDataSubstring = encryptedDataSubstring.substring(0, encryptedDataSubstring.length - fromKey2);
      const encryptedRequestData = `1${fromKey1}${dataBeforeKey1}${key1}${encryptedDataSubstring}${key2}${dataBeforeAfterKey2}${fromKey2}1`;
  
      const encryptedDataObject = { data: encryptedRequestData };
      return encryptedDataObject;
    } catch (error) {
      console.error(error);
      return {}; 
    }
  }

  generateRandomKey(length: number): string {
    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    let key = '';
    for (let i = 0; i < length; i++) {
      key += characters.charAt(Math.floor(Math.random() * characters.length));
    }
    return key;
  }
}
