"""Tests for PeerDrop Core models."""

from peerdrop.core.models import (
    Device,
    Peer,
    Transfer,
    TransferRequest,
    TransferStatus,
)


def test_peer_creation():
    peer = Peer(
        peer_id="QmTest123",
        addrs=["/ip4/192.168.1.1/tcp/4001"],
        name="Test Device",
    )
    assert peer.peer_id == "QmTest123"
    assert len(peer.addrs) == 1
    assert peer.is_online is True


def test_transfer_creation():
    transfer = Transfer(
        file_path="/tmp/test.txt",
        file_name="test.txt",
        file_size=1024,
        root_cid="QmRootCID",
        sender_peer_id="QmSender",
        receiver_peer_id="QmReceiver",
    )
    assert transfer.status == TransferStatus.PENDING
    assert transfer.progress == 0.0
    assert len(transfer.transfer_id) == 12


def test_transfer_request():
    req = TransferRequest(
        file_name="photo.jpg",
        file_size=2048,
        root_cid="QmPhotoCID",
        sender_peer_id="QmSender",
    )
    assert req.file_name == "photo.jpg"
    assert req.file_size == 2048


def test_transfer_status_values():
    assert TransferStatus.PENDING.value == "pending"
    assert TransferStatus.TRANSFERRING.value == "transferring"
    assert TransferStatus.COMPLETED.value == "completed"
    assert TransferStatus.FAILED.value == "failed"
    assert TransferStatus.CANCELLED.value == "cancelled"


def test_device_creation():
    device = Device(
        peer_id="QmMyDevice",
        name="My Laptop",
        listen_port=4001,
    )
    assert device.peer_id == "QmMyDevice"
    assert device.listen_port == 4001
