# -*- coding: utf-8 -*-
"""Genera datos.csv: 60 días de biométricos ilustrativos para la demo de substanze.ai.

Fisiología plausible con semilla fija (reproducible): FC reposo con onda
semanal y ruido, HRV inversamente correlacionada, sueño con altibajos.
La última semana lleva una deriva deliberada (FC +, HRV −) para que el
análisis de pandas tenga algo interesante que contar.

Uso:  python generar_datos.py   (escribe datos.csv junto a este script)
"""
import csv
import datetime as dt
import math
import random

DIAS = 60
FIN = dt.date(2026, 9, 27)  # último día de la serie
SEMILLA = 42

random.seed(SEMILLA)

filas = []
for i in range(DIAS):
    dia = FIN - dt.timedelta(days=DIAS - 1 - i)
    t = i / (DIAS - 1)

    # deriva de las últimas 7 noches: carga acumulada
    ultima_semana = i >= DIAS - 7

    fc = (
        52.0
        - 1.2 * t                                   # adaptación lenta
        + 1.4 * math.sin(2 * math.pi * i / 7)        # onda semanal
        + random.gauss(0, 0.9)                       # ruido
        + (2.6 if ultima_semana else 0)              # estrés reciente
    )

    hrv = (
        46.0
        + 1.5 * t
        - 0.9 * (fc - 52.0)                          # inversa a la FC
        + random.gauss(0, 1.6)
        - (7.5 if ultima_semana else 0)              # recuperación en baja
    )

    sueno = 7.2 + random.gauss(0, 0.55) - (0.5 if ultima_semana else 0)
    if random.random() < 0.08:                       # alguna noche corta
        sueno = random.uniform(5.4, 6.0)

    filas.append(
        (dia.isoformat(), round(fc), round(hrv), round(max(sueno, 4.5), 1))
    )

with open("datos.csv", "w", newline="", encoding="utf-8") as f:
    w = csv.writer(f)
    w.writerow(["fecha", "fc_reposo", "hrv_rmssd", "horas_sueno"])
    w.writerows(filas)

print(f"datos.csv: {len(filas)} días, del {filas[0][0]} al {filas[-1][0]}")
