from __future__ import annotations

from typing import TYPE_CHECKING

from tools.testing.target_determination.heuristics.correlated_with_historical_failures import (
    CorrelatedWithHistoricalFailures,
)
from tools.testing.target_determination.heuristics.edited_by_pr import EditedByPR
from tools.testing.target_determination.heuristics.filepath import Filepath
from tools.testing.target_determination.heuristics.historical_class_failure_correlation import (
    HistoricalClassFailurCorrelation,
)
from tools.testing.target_determination.heuristics.historical_edited_files import (
    HistorialEditedFiles,
)
from tools.testing.target_determination.heuristics.interface import (
    AggregatedHeuristics as AggregatedHeuristics,
    TestPrioritizations as TestPrioritizations,
)
from tools.testing.target_determination.heuristics.llm import LLM
from tools.testing.target_determination.heuristics.mentioned_in_pr import MentionedInPR
from tools.testing.target_determination.heuristics.previously_failed_in_pr import (
    PreviouslyFailedInPR,
)
from tools.testing.target_determination.heuristics.profiling import Profiling
from tools.testing.target_determination.heuristics.public_bindings import PublicBindings


if TYPE_CHECKING:
    from tools.testing.target_determination.heuristics.interface import (
        HeuristicInterface as HeuristicInterface,
    )


# All currently running heuristics.
# To add a heurstic in trial mode, specify the keywork argument `trial_mode=True`.
HEURISTICS: list[HeuristicInterface] = [
    PreviouslyFailedInPR(),
    EditedByPR(),
    MentionedInPR(),
    HistoricalClassFailurCorrelation(trial_mode=True),
    CorrelatedWithHistoricalFailures(),
    HistorialEditedFiles(),
    Profiling(),
    LLM(),
    Filepath(),
    PublicBindings(),
]
