#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Inspecte : texte complet du post + bascule tri 'Tous les commentaires' + comptage avant/apres."""
import sys, time, json, re
from fb_common import session_facebook, DATA
from scrape import bare_permalink, expand_all
from selenium.webdriver.common.by import By

rang = int(sys.argv[1]) if len(sys.argv) > 1 else 2
snap = json.load(open(DATA + "/snapshot.json"))
url = None
for p in snap["posts"]:
    if p["rang"] == rang:
        url = bare_permalink(p["url"]) or p["url"]
print("POST rang", rang, ":", url)

d = session_facebook(); d.get(url); time.sleep(6)

# --- 1) cliquer le "Voir plus" du post pour le texte complet ---
for sp in d.find_elements(By.XPATH, "//div[@role='article']//div[@role='button'][contains(.,'Voir plus')] | //span[text()='Voir plus']")[:3]:
    try:
        d.execute_script("arguments[0].click();", sp); time.sleep(1)
    except Exception: pass

# heuristique texte du post : les plus longs dir=auto AVANT le 1er commentaire
js_post = """
const arts=[...document.querySelectorAll('[aria-label^="Commentaire de"],[aria-label^="Réponse de"]')];
const firstC = arts.length?arts[0]:null;
const all=[...document.querySelectorAll('div[dir="auto"]')];
const out=[];
for(const e of all){
  if(firstC && (firstC.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING)===0 && e!==firstC){
     // e est avant firstC ? compareDocumentPosition sur firstC: FOLLOWING bit set si e suit firstC
  }
  const t=e.textContent.trim();
  if(t.length>40) out.push([t.length,t]);
}
return out.slice(0,6);
"""
cand = d.execute_script(js_post)
print("=== candidats texte post (>40c) ===")
for ln, t in sorted(cand, reverse=True)[:3]:
    print("  [%d]" % ln, t[:160].replace("\n", " "))

# --- 2) compter commentaires AVANT bascule ---
expand_all(d)
before = len(d.find_elements(By.CSS_SELECTOR, '[aria-label^="Commentaire de"]'))
print("=== AVANT bascule : commentaires top-level (aria) =", before)

# --- 3) trouver le selecteur de tri ---
print("=== recherche du selecteur de tri ===")
sortbtn = None
for el in d.find_elements(By.XPATH, "//div[@role='button'][contains(.,'pertinent') or contains(.,'Pertinent') or contains(.,'récents') or contains(.,'Tous les commentaires')]"):
    txt = (el.text or "").strip()
    if txt and len(txt) < 40:
        print("  bouton tri candidat:", repr(txt))
        if not sortbtn: sortbtn = el
if sortbtn:
    d.execute_script("arguments[0].scrollIntoView({block:'center'});", sortbtn)
    d.execute_script("arguments[0].click();", sortbtn); time.sleep(2)
    print("  menu ouvert, options:")
    opts = d.find_elements(By.XPATH, "//*[@role='menuitem'] | //*[@role='menuitemradio']")
    for o in opts[:8]:
        print("    -", repr((o.text or "").strip()[:40]))
    # cliquer 'Tous les commentaires'
    clicked = False
    for o in opts:
        if "Tous les commentaires" in (o.text or "") or "All comments" in (o.text or ""):
            d.execute_script("arguments[0].click();", o); clicked = True; break
    print("  -> 'Tous les commentaires' cliqué:", clicked)
    time.sleep(4)
else:
    print("  AUCUN selecteur de tri trouvé")

# --- 4) compter APRES bascule ---
expand_all(d)
after_els = d.find_elements(By.CSS_SELECTOR, '[aria-label^="Commentaire de"]')
after = len(after_els)
print("=== APRES bascule : commentaires top-level (aria) =", after)
# noms distincts apres
names = set()
for a in after_els:
    al = a.get_attribute("aria-label") or ""
    m = re.match(r'Commentaire de (.+?) il y a', al)
    if m: names.add(m.group(1))
print("=== auteurs distincts APRES:", len(names), "->", sorted(names))
d.quit()

