from dataclasses import dataclass


@dataclass
class DiskSpaceProbeResult:
    source: str
    status: str
    free_bytes: int | None = None
    message: str | None = None


class DiskSpaceProvider:
    async def get_free_bytes(self, target_host: str) -> DiskSpaceProbeResult:
        raise NotImplementedError


class NullDiskSpaceProvider(DiskSpaceProvider):
    async def get_free_bytes(self, target_host: str) -> DiskSpaceProbeResult:
        return DiskSpaceProbeResult(
            source="agentless",
            status="unavailable",
            free_bytes=None,
            message=f"Agentless mode: host-level free disk is not available for {target_host}.",
        )


def get_disk_space_provider() -> DiskSpaceProvider:
    # Extension point: replace by SSH/Agent backed implementation.
    return NullDiskSpaceProvider()
