from datetime import datetime

import pytest
from frostfs_testlib import reporter
from frostfs_testlib.credentials.interfaces import CredentialsProvider, User
from frostfs_testlib.storage.cluster import Cluster
from frostfs_testlib.storage.dataclasses.wallet import WalletInfo


@pytest.fixture(scope="module")
def owner_wallet(credentials_provider: CredentialsProvider, cluster: Cluster) -> WalletInfo:
    with reporter.step("Create user wallet which owns containers and objects"):
        user = User(f"user_{hex(int(datetime.now().timestamp() * 1000000))}")
        return credentials_provider.GRPC.provide(user, cluster.cluster_nodes[0])


@pytest.fixture(scope="module")
def user_wallet(credentials_provider: CredentialsProvider, cluster: Cluster) -> WalletInfo:
    with reporter.step("Create user wallet which will use objects from owner via static session"):
        user = User(f"user_{hex(int(datetime.now().timestamp() * 1000000))}")
        return credentials_provider.GRPC.provide(user, cluster.cluster_nodes[0])


@pytest.fixture(scope="module")
def stranger_wallet(credentials_provider: CredentialsProvider, cluster: Cluster) -> WalletInfo:
    with reporter.step("Create stranger user wallet which should fail to obtain data"):
        user = User(f"user_{hex(int(datetime.now().timestamp() * 1000000))}")
        return credentials_provider.GRPC.provide(user, cluster.cluster_nodes[0])