import random
from datetime import datetime

import allure
import pytest
from frostfs_testlib.storage.cluster import Cluster, ClusterNode
from frostfs_testlib.storage.controllers import ShardsWatcher


@pytest.fixture()
@allure.title("Select random node for testing")
def node_under_test(cluster: Cluster) -> ClusterNode:
    selected_node = random.choice(cluster.cluster_nodes)
    allure.attach(f"{selected_node}", "Selected node", allure.attachment_type.TEXT)
    return selected_node


@pytest.fixture()
@allure.title("Provide Shards watcher")
def shards_watcher(node_under_test: ClusterNode) -> ShardsWatcher:
    watcher = ShardsWatcher(node_under_test)
    return watcher


@pytest.fixture()
@allure.title("Test start time")
def test_start_time() -> datetime:
    start_time = datetime.utcnow()
    return start_time