<?php

namespace App\Libraries;

use Exception;

class AldLibrary
{
    //private $fixedKey = session('nip');
	
	public function generateKey($username) {
        $time = time();
        $time_mod = $time % 8; // Modulus time with 8

        $fixed_phrase = "fixed_phrase"; // Frase tetap yang elu isi sendiri cuk!
        $key_variations = [
            "peopleDoCrazyThing", "JumpAround!", "ZarakiKenpachi", "UpOverAndGo!!!", "HeyThere..NiceToMeetY0u", "ToBeOrNotToBe!", "AreYouOkay?..", "paip123!OYEE"
        ];
        $mod_key = $key_variations[$time_mod]; // Kata kunci berdasarkan hasil mod dari time()

        // Menghitung jumlah ASCII dari username
        $ascii_sum = 0;
        for ($i = 0; $i < strlen($username); $i++) {
            $ascii_sum += ord($username[$i]);
        }

        // Menentukan frase "genap" atau "ganjil"
        $even_odd_phrase = ($ascii_sum % 2 == 0) ? "genap" : "ganjil";

        // Menggabungkan semua kunci
        $final_key = $username . $mod_key . $fixed_phrase . $even_odd_phrase;

        // Mengembalikan kunci yang dihasilkan
        return $final_key;
    }

    public function encryptMe($str, $username) {
        $hasil = '';
        $kunci = $this->generateKey($username);
        for ($i = 0; $i < strlen($str); $i++) {
            $karakter = substr($str, $i, 1);
            $kuncikarakter = substr($kunci, ($i % strlen($kunci)), 1);
            $karakter = chr(ord($karakter) + ord($kuncikarakter));
            $hasil .= $karakter;
        }
        return urlencode(base64_encode($hasil));
    }

    public function decryptMe($str, $username) {
        $str = base64_decode(urldecode($str));
        $hasil = '';
        $kunci = $this->generateKey($username);
        for ($i = 0; $i < strlen($str); $i++) {
            $karakter = substr($str, $i, 1);
            $kuncikarakter = substr($kunci, ($i % strlen($kunci)), 1);
            $karakter = chr(ord($karakter) - ord($kuncikarakter));
            $hasil .= $karakter;
        }
        return $hasil;
    }
	
	public function encryptMeMawas($str) {
        $hasil = '';
		$salt = "generateFromDMPToMawasSince26082024";
        $kunci = $this->generateKey($salt);
        for ($i = 0; $i < strlen($str); $i++) {
            $karakter = substr($str, $i, 1);
            $kuncikarakter = substr($kunci, ($i % strlen($kunci)), 1);
            $karakter = chr(ord($karakter) + ord($kuncikarakter));
            $hasil .= $karakter;
        }
        return urlencode(base64_encode($hasil));
    }

    public function decryptMeMawas($str) {
        $str = base64_decode(urldecode($str));
        $hasil = '';
		$salt = "generateFromDMPToMawasSince26082024";
        $kunci = $this->generateKey($salt);
        for ($i = 0; $i < strlen($str); $i++) {
            $karakter = substr($str, $i, 1);
            $kuncikarakter = substr($kunci, ($i % strlen($kunci)), 1);
            $karakter = chr(ord($karakter) - ord($kuncikarakter));
            $hasil .= $karakter;
        }
        return $hasil;
    }
}