"""Best-snapshot archive used by the upstream AlgoTune Agent."""
from __future__ import annotations

from ...components import Population
from ...records import Genome


def algotune_priority(genome: Genome) -> tuple[int, float]:
    """Rank the evaluator-valid snapshots retained by the workspace archive."""
    return (1 if genome.metadata.get("valid", True) else 0, genome.fitness)


class AlgoTunePopulation(Population):
    """Keep every evaluator-valid measured workspace and expose its best snapshot."""

    def __init__(self):
        self._members: dict[str, Genome] = {}

    def add(self, genome: Genome) -> bool:
        if genome.metadata.get("valid") is False:
            # Evaluation failures and wrong/invalid workspaces stay observable in the trajectory but
            # never become the mutable parent selected by the next command.
            genome.metadata.update(admitted=False, eval_failed=True)
            return False
        self._members[genome.id] = genome
        genome.metadata.pop("eval_failed", None)
        genome.metadata["admitted"] = True
        return True

    def query(self, spec: dict | None = None) -> list[Genome]:
        members = sorted(self._members.values(), key=algotune_priority, reverse=True)
        top = (spec or {}).get("top")
        return members[:top] if top else members

    def all(self) -> list[Genome]:
        return list(self._members.values())

    def best(self) -> Genome | None:
        return max(self._members.values(), key=algotune_priority) if self._members else None
