"""
Integration Gojiberry - pousse les commentateurs LinkedIn vers les campagnes.
Endpoint : POST https://api.gojiberry.ai/contacts/csv-import
Decouvert en lisant le bundle JS de l'app Gojiberry (main-TYXHSS5L.js).
"""
import requests, os, logging

BASE = "https://api.gojiberry.ai"


def _headers():
    return {
        "Authorization": "Bearer {}".format(os.getenv('GOJIBERRY_API_KEY', '')),
        "Content-Type": "application/json"
    }


def add_to_list(list_id, first_name, last_name, profile_url,
                note="", intent="", linkedin_identifier=""):
    """
    Cree un contact et l'ajoute directement a une liste de campagne.
    Retourne True si succes, False sinon.
    """
    contact = {
        "listId": list_id,
        "firstName": first_name or "LinkedIn",
        "lastName":  last_name  or "Contact",
        "profileUrl": profile_url,
    }
    if note:
        contact["note"] = note[:500]
    if intent:
        contact["intent"] = intent[:300]
    if linkedin_identifier:
        contact["linkedinIdentifier"] = linkedin_identifier

    payload = {
        "contacts": [contact],
        "duplicateCheckByName": False
    }

    try:
        r = requests.post(
            "{}/contacts/csv-import".format(BASE),
            headers=_headers(),
            json=payload,
            timeout=15
        )
        r.raise_for_status()
        logging.info("Gojiberry : contact ajoute liste {} ({} {})".format(
            list_id, first_name, last_name))
        return True
    except Exception as e:
        logging.error("Erreur Gojiberry add_to_list : {}".format(e))
        return False


def get_active_campaigns():
    """
    Retourne les campagnes actives enrichies de leur liste associee.
    Format retourne :
      [{"id": 12409, "name": "Restau-Hotellerie", "description": "...",
        "list_id": 17391, "list_name": "Prospects Restau FR"}, ...]
    """
    try:
        r_camps = requests.get("{}/campaigns".format(BASE), headers=_headers(), timeout=10)
        r_camps.raise_for_status()
        r_lists = requests.get("{}/lists".format(BASE), headers=_headers(), timeout=10)
        r_lists.raise_for_status()

        lists_by_campaign = {}
        for lst in r_lists.json():
            cid = lst.get('campaignId')
            if cid:
                lists_by_campaign[cid] = lst

        result = []
        for c in r_camps.json():
            if not c.get('active'):
                continue
            lst = lists_by_campaign.get(c['id'], {})
            if not lst:
                continue  # Pas de liste associee

            # Construire une description a partir des messages de la campagne
            steps = c.get('steps', [])
            msgs = [s.get('message', '') for s in steps if s.get('message')]
            description = msgs[0][:300] if msgs else c.get('name', '')

            result.append({
                "id":          c['id'],
                "name":        c['name'],
                "description": description,
                "list_id":     lst['id'],
                "list_name":   lst['name'],
            })

        return result

    except Exception as e:
        logging.error("Erreur get_active_campaigns : {}".format(e))
        return []
