<?php

namespace App\Libs\TikTok\MiniProgram\Server;

use App\Libs\TikTok\Kernel\Encryptor as BaseEncryptor;
use App\Libs\TikTok\Kernel\Exceptions\DecryptException;
use App\Libs\TikTok\Kernel\Exceptions\InvalidArgumentException;
use App\Libs\TikTok\Kernel\Support\AES;

/**
 * Class Encryptor.
 *
 * @author mingyoung <mingyoungcheung@gmail.com>
 */
class Encryptor extends BaseEncryptor {
    /**
     * Decrypt data.
     *
     * @param string $sessionKey
     * @param string $iv
     * @param string $encrypted
     *
     * @return array
     *
     * @throws DecryptException|InvalidArgumentException
     */
    public function decryptData(string $sessionKey, string $iv, string $encrypted): array {
        $decrypted = AES::decrypt(
            base64_decode($encrypted),
            base64_decode($sessionKey),
            base64_decode($iv),
        );

        $decrypted = json_decode($decrypted, true);

        if (!$decrypted) {
            throw new DecryptException('The given payload is invalid.');
        }

        return $decrypted;
    }

}
