#!/usr/bin/env python3
from __future__ import annotations

import argparse
from pathlib import Path
import pandas as pd

SCRIPT_VERSION = "sort_pool_candidates_v1_2026_05_02"

def find_col(cols, needles):
    for c in cols:
        lc = c.lower()
        if all(n in lc for n in needles):
            return c
    return None

def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("--csv", required=True)
    ap.add_argument("--out", required=True)
    args = ap.parse_args()

    print(f"[script_version] {__file__} SCRIPT_VERSION={SCRIPT_VERSION}")
    df = pd.read_csv(args.csv)
    cols = list(df.columns)

    tvl_col = find_col(cols, ["tvl"])
    vol_col = find_col(cols, ["volume", "24"]) or find_col(cols, ["volume", "h24"]) or find_col(cols, ["volume"])
    tx_col = find_col(cols, ["tx"])

    df["_tvl_usd"] = pd.to_numeric(df[tvl_col], errors="coerce") if tvl_col else float("nan")
    df["_vol24_usd"] = pd.to_numeric(df[vol_col], errors="coerce") if vol_col else float("nan")
    df["_tx24"] = pd.to_numeric(df[tx_col], errors="coerce") if tx_col else float("nan")
    df["_vol_tvl"] = df["_vol24_usd"] / df["_tvl_usd"].replace(0, float("nan"))

    df["_candidate_score"] = (
        df["_vol_tvl"].fillna(0) * 10
        + (df["_vol24_usd"].fillna(0) / 100000).clip(0, 50)
        + (df["_tx24"].fillna(0) / 1000).clip(0, 20)
    )

    df = df.sort_values(["_candidate_score", "_vol_tvl", "_vol24_usd"], ascending=False)
    out = Path(args.out)
    out.parent.mkdir(parents=True, exist_ok=True)
    df.to_csv(out, index=False)
    print(df.head(30).to_string(index=False))
    print(f"saved: {out}")

if __name__ == "__main__":
    main()
