import time

def fake_api(page):
    if page == 2 and not getattr(fake_api, "retried", False):
        fake_api.retried=True
        return 429, {"Retry-After": 1}, None
    rows=[{"id": page*10+i, "amount": i*12.5} for i in range(1,4)]
    return 200, {}, {"results": rows, "next": page+1 if page<3 else None}

def extract():
    page=1; out=[]; retries=0
    while page:
        status, headers, body=fake_api(page)
        print(f"pagina={page} status={status}")
        if status==429:
            if retries>=3: raise RuntimeError("demasiados reintentos")
            retries+=1; time.sleep(int(headers.get("Retry-After",1))); continue
        retries=0; out.extend(body["results"]); page=body["next"]
    return out

if __name__ == '__main__':
    rows=extract(); print(f"registros={len(rows)}")
