"""Generate an explicitly synthetic, independent-participant teaching trial."""
from pathlib import Path
import json
import numpy as np
import pandas as pd
from scipy.special import expit

ROOT = Path(__file__).resolve().parents[1]
SEED = 20261012


def generate(n: int = 1600, seed: int = SEED) -> pd.DataFrame:
    rng = np.random.default_rng(seed)
    treatment = rng.binomial(1, 0.5, n)
    age = rng.integers(18, 71, n)
    baseline_visits = rng.poisson(3, n)
    channel = rng.choice(["search", "social", "referral"], n, p=[0.45, 0.35, 0.20])
    channel_effect = np.array([{"search": 0, "social": -0.25, "referral": 0.35}[c] for c in channel])
    eta = -1.8 + 0.65 * treatment + 0.015 * (age - 40) + 0.18 * baseline_visits + channel_effect
    outcome = rng.binomial(1, expit(eta))
    return pd.DataFrame({"id": np.arange(1, n + 1), "treatment": treatment, "age": age,
                         "baseline_visits": baseline_visits, "channel": channel, "outcome": outcome})


if __name__ == "__main__":
    (ROOT / "data").mkdir(exist_ok=True)
    frame = generate()
    frame.to_csv(ROOT / "data/trial.csv", index=False, lineterminator="\n")
    metadata = {"synthetic": True, "seed": SEED, "n": len(frame), "numpy": np.__version__,
                "generation_order": ["treatment", "age", "baseline_visits", "channel", "outcome"],
                "true_conditional_treatment_log_or": 0.65,
                "note": "Teaching data only; not evidence about a real intervention."}
    (ROOT / "data/generation.json").write_text(json.dumps(metadata, indent=2) + "\n", encoding="utf-8")
    print(f"Generated {len(frame)} synthetic rows: {ROOT / 'data/trial.csv'}")
