#!/usr/bin/env python3
"""
Network log collection unit:
- Move network-side logs into `net_log_raw/` based on patterns.
"""

from __future__ import annotations

from dataclasses import dataclass
from pathlib import Path
from typing import Iterable

from fs_utils import ensure_dir, move
from log_patterns import looks_like_net_log
from workflow_layout import SessionLayout


@dataclass(frozen=True)
class NetlogCollector:
    layout: SessionLayout

    def collect(self, session_root: Path, protected_dirs: Iterable[Path]) -> None:
        net_raw_dir = ensure_dir(session_root / self.layout.net_log_raw)
        protected = {p.resolve() for p in protected_dirs if p.exists()}
        for path in sorted(session_root.rglob("*")):
            if not path.exists():
                continue
            try:
                resolved = path.resolve()
            except Exception:
                continue
            if resolved == net_raw_dir.resolve() or any(parent in protected for parent in resolved.parents):
                continue
            if not looks_like_net_log(path):
                continue
            try:
                move(path, net_raw_dir)
            except Exception:
                pass