"""Activity + analytics event recording."""

from __future__ import annotations

from typing import Any

from sqlalchemy.orm import Session

from app.models import AnalyticsEvent, Campaign, Lead, OutreachActivity, OutreachTask, utcnow


def log_activity(
    db: Session,
    activity_type: str,
    lead: Lead | None = None,
    task: OutreachTask | None = None,
    campaign: Campaign | None = None,
    description: str | None = None,
    payload: dict[str, Any] | None = None,
) -> OutreachActivity:
    """Write a timeline entry and the matching analytics event."""
    campaign_id = None
    if campaign is not None:
        campaign_id = campaign.id
    elif task is not None:
        campaign_id = task.campaign_id
    elif lead is not None:
        campaign_id = lead.campaign_id

    activity = OutreachActivity(
        lead_id=lead.id if lead else None,
        task_id=task.id if task else None,
        campaign_id=campaign_id,
        activity_type=str(activity_type),
        description=description,
        payload=payload or {},
    )
    db.add(activity)

    db.add(
        AnalyticsEvent(
            event_type=str(activity_type),
            entity_type="lead" if lead else ("task" if task else "campaign"),
            entity_id=(lead.id if lead else (task.id if task else campaign_id)),
            campaign_id=campaign_id,
            payload=payload or {},
        )
    )

    if lead is not None:
        lead.last_activity_at = utcnow()
    return activity
