import time
from datetime import datetime, timezone
import requests
import argparse

def parse_iso(dt):
    if not dt:
        return None
    try:
        if dt.endswith("Z"):
            dt = dt.replace("Z", "+00:00")
        return datetime.fromisoformat(dt)
    except:
        return None

def is_disabled(idx, now_utc):
    # New condition: treat enable=False as disabled
    if idx.get("enable") is False:
        return True

    status = idx.get("status", {})
    disabled_till = parse_iso(status.get("disabledTill"))
    return bool(disabled_till and disabled_till > now_utc)

def get_indexers(session, base):
    r = session.get(f"{base}/api/v1/indexer", params={"includeStatus": "true"})
    r.raise_for_status()
    return r.json()

def fetch_indexer(session, base, idx_id):
    r = session.get(f"{base}/api/v1/indexer/{idx_id}")
    if r.status_code == 200:
        return r.json()
    return None

def reenable(session, base, idx):
    idx_id = idx["id"]
    detail = fetch_indexer(session, base, idx_id)
    if not detail:
        return False
    detail["enable"] = True
    detail.pop("status", None)
    r = session.put(f"{base}/api/v1/indexer/{idx_id}", json=detail)
    return r.status_code in (200, 202)

def test(session, base, idx):
    idx_id = idx["id"]
    for u in [
        f"{base}/api/v1/indexer/{idx_id}/action/test",
        f"{base}/api/v1/indexer/{idx_id}/test",
    ]:
        r = session.post(u)
        if r.status_code in (200, 201, 202, 204):
            return True
    return False

def main():
    parser = argparse.ArgumentParser(description="Re-enable disabled Prowlarr indexers periodically")
    parser.add_argument("-u", "--base-url", required=True, help="Prowlarr base URL")
    parser.add_argument("-k", "--api-key", required=True, help="API key")
    parser.add_argument("-i", "--interval", type=float, default=10, help="Check interval (seconds)")
    args = parser.parse_args()

    session = requests.Session()
    session.headers.update({"X-Api-Key": args.api_key, "Accept": "application/json"})
    base = args.base_url.rstrip("/")

    print(f"Checking every {args.interval} seconds...")

    try:
        while True:
            now = datetime.now(timezone.utc)
            try:
                indexers = get_indexers(session, base)
            except Exception as e:
                print(f"Fetch failed: {e}")
                time.sleep(args.interval)
                continue

            disabled = [idx for idx in indexers if is_disabled(idx, now)]

            if disabled:
                print(f"[{datetime.now().isoformat(timespec='seconds')}] {len(disabled)} disabled indexer(s) found")
            else:
                print(f"[{datetime.now().isoformat(timespec='seconds')}] No disabled indexers")

            for idx in disabled:
                name = idx.get("name", idx["id"])
                ok_enable = reenable(session, base, idx)
                ok_test = test(session, base, idx)
                print(f"Re-enable {'OK' if ok_enable else 'FAIL'}; Test {'OK' if ok_test else 'FAIL'} — {name}")

            time.sleep(args.interval)
    except KeyboardInterrupt:
        print("\nStopping.")

if __name__ == "__main__":
    main()
