"""Mark the current stock-history universe as tradable in `stocks`.

This is a convenience script for verification/debugging.

It sets:
- tradable=false for the base EQ universe (stock-like, NSE)
- tradable=true for the filtered universe returned by `_universe_query()`

Safe to re-run.
"""

from __future__ import annotations

from datetime import datetime
import os
import sys

# When running as `python scripts/...py`, Python sets sys.path[0] to `scripts/`.
# Add the API root so `import app...` works reliably.
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))

from app.db.database import get_mongo_db
from app.v1.background.stock_history_refresh import _universe_query


def main() -> None:
    gen = get_mongo_db()
    db = next(gen)

    now = datetime.utcnow()

    # Base "stock-like" universe in this project (what we were previously calling raw EQ).
    base = {
        "is_active": {"$ne": False},
        "exchange": "NSE",
        "instrument_token": {"$ne": None},
        "stock_id": {"$ne": None},
        "instrument_type": "EQ",
    }

    final_q = _universe_query()

    base_n = db["stocks"].count_documents(base)
    final_n = db["stocks"].count_documents(final_q)

    res0 = db["stocks"].update_many(
        base,
        {
            "$set": {
                "tradable": False,
                "tradable_marked_at": now,
                "tradable_source": "stock_history_universe",
            }
        },
    )

    res1 = db["stocks"].update_many(
        final_q,
        {
            "$set": {
                "tradable": True,
                "tradable_marked_at": now,
                "tradable_source": "stock_history_universe",
            }
        },
    )

    tradable_true = db["stocks"].count_documents({**base, "tradable": True})
    tradable_false = db["stocks"].count_documents({**base, "tradable": False})

    print("base_raw_EQ_count:", base_n)
    print("final_universe_count:", final_n)
    print("updated_base_set_false_matched:", res0.matched_count, "modified:", res0.modified_count)
    print("updated_final_set_true_matched:", res1.matched_count, "modified:", res1.modified_count)
    print("verify_tradable_true_in_base:", tradable_true)
    print("verify_tradable_false_in_base:", tradable_false)

    try:
        gen.close()
    except Exception:
        pass


if __name__ == "__main__":
    main()
