#!/usr/bin/env python3
"""
Marque les lignes _batch_date/_statut d'une base CSV de prospection Fidulia.

Usage:
    python3 mark_prospection_batch.py --csv PATH --date YYYY-MM-DD \
        --sent url1,url2,... [--discarded url1,url2,...]

Remplace les one-liners python3 -c ad hoc utilisés précédemment pour cette
tâche, afin que la permission Bash puisse être scopée à ce script exact
plutôt qu'à l'interpréteur python3 dans son ensemble.
"""
import argparse
import csv
import sys


def parse_url_list(raw):
    if not raw:
        return []
    return [u.strip().rstrip("/") for u in raw.split(",") if u.strip()]


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--csv", required=True, help="Chemin vers la base CSV à mettre à jour")
    parser.add_argument("--date", required=True, help="Date du batch, format YYYY-MM-DD")
    parser.add_argument("--sent", default="", help="URLs LinkedIn (séparées par virgule) marquées 'Invitation envoyée'")
    parser.add_argument("--discarded", default="", help="URLs LinkedIn (séparées par virgule) marquées 'ÉCARTÉ-BATCH'")
    args = parser.parse_args()

    sent_urls = set(parse_url_list(args.sent))
    discarded_urls = set(parse_url_list(args.discarded))

    if not sent_urls and not discarded_urls:
        print("Rien à marquer : --sent et --discarded sont vides.", file=sys.stderr)
        sys.exit(1)

    with open(args.csv, newline="", encoding="utf-8") as f:
        reader = csv.DictReader(f)
        fieldnames = reader.fieldnames
        rows = list(reader)

    if "_batch_date" not in (fieldnames or []) or "_statut" not in (fieldnames or []):
        print("Le CSV ne contient pas les colonnes _batch_date/_statut attendues.", file=sys.stderr)
        sys.exit(1)

    count_sent = 0
    count_discarded = 0
    for row in rows:
        url = (row.get("linkedinUrl") or "").rstrip("/")
        if url in sent_urls:
            row["_batch_date"] = args.date
            row["_statut"] = "Invitation envoyée"
            count_sent += 1
        elif url in discarded_urls:
            row["_batch_date"] = args.date
            row["_statut"] = "ÉCARTÉ-BATCH"
            count_discarded += 1

    with open(args.csv, "w", newline="", encoding="utf-8") as f:
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(rows)

    remaining = sum(
        1 for r in rows
        if not r.get("_batch_date") and r.get("profileStatus") not in ("connected", "pending")
    )

    print(f"sent updated: {count_sent} | discarded updated: {count_discarded} | remaining candidates: {remaining}")


if __name__ == "__main__":
    main()
