<?php

declare(strict_types=1);

namespace MultipleChain\SolanaSDK\Tests\Unit;

use PHPUnit\Framework\TestCase;
use MultipleChain\SolanaSDK\Account;
use MultipleChain\SolanaSDK\Keypair;

class AccountTest extends TestCase
{
    /**
     * @test
     * @return void
     */
    // @phpcs:ignore
    public function it_generate_new_account(): void
    {
        $account = new Account();

        $this->assertEquals(64, sizeof($account->getSecretKey()));
    }

    /**
     * @test
     * @return void
     */
    // @phpcs:ignore
    public function it_account_from_secret_key(): void
    {
        $secretKey = [
            153, 218, 149, 89, 225, 94, 145, 62, 233, 171, 46, 83, 227, 223, 173, 87,
            93, 163, 59, 73, 190, 17, 37, 187, 146, 46, 51, 73, 79, 73, 136, 40, 27,
            47, 73, 9, 110, 62, 93, 189, 15, 207, 169, 192, 192, 205, 146, 217, 171,
            59, 33, 84, 75, 52, 213, 221, 74, 101, 217, 139, 135, 139, 153, 34,
        ];

        $account = new Account($secretKey);

        $this->assertEquals('2q7pyhPwAwZ3QMfZrnAbDhnh9mDUqycszcpf86VgQxhF', $account->getPublicKey()->toBase58());
    }

    /**
     * @test
     * @return void
     */
    // @phpcs:ignore
    public function it_account_keypair(): void
    {
        $expectedAccount = new Account();
        $keypair = Keypair::fromSecretKey($expectedAccount->getSecretKey());

        $derivedAccount = new Account($keypair->getSecretKey());
        $this->assertEquals($expectedAccount->getPublicKey(), $derivedAccount->getPublicKey());
        $this->assertEquals($expectedAccount->getSecretKey(), $derivedAccount->getSecretKey());
    }
}
