# create_youtuber.py

import os
import stripe
from app_copy import app
from models import db, Youtuber
import uuid

stripe.api_key = os.getenv("STRIPE_SECRET_KEY")
# ❌ Evita imprimir la secret key en consola
# print(stripe.api_key)

def _create_onboarding_link(acct_id: str):
    return stripe.AccountLink.create(
        account=acct_id,
        refresh_url="https://backtestingmarket.com/onboarding/refresh",
        return_url="https://backtestingmarket.com/onboarding/success",
        type="account_onboarding",
    )

def crear_youtuber(email):
    with app.app_context():
        existente = Youtuber.query.filter_by(email=email).first()

        if existente:
            # Si ya hay cuenta de Stripe, solo regenerar link (el anterior expira)
            if existente.stripe_account_id:
                account_link = _create_onboarding_link(existente.stripe_account_id)
                print("ℹ️ Youtuber ya existía.")
                print("🧾 Referrer code:", existente.referrer_code)
                print("🔗 Enlace de onboarding (nuevo):")
                print(account_link.url)
                return

            # Si no tiene cuenta Stripe, créala y asígnala
            account = stripe.Account.create(
                type="express",
                country="US",
                email=email,
                capabilities={"transfers": {"requested": True}},  # ✅ clave para pagarles
            )
            existente.stripe_account_id = account.id
            db.session.commit()

            account_link = _create_onboarding_link(account.id)
            print("✅ Cuenta Stripe asignada a youtuber existente.")
            print("🧾 Referrer code:", existente.referrer_code)
            print("🏦 Stripe account:", existente.stripe_account_id)
            print("🔗 Enlace de onboarding:")
            print(account_link.url)
            return

        # Crear nuevo youtuber con referrer_code simple (colisión muy improbable)
        referrer_code = str(uuid.uuid4())[:8]
        y = Youtuber(email=email, referrer_code=referrer_code)
        db.session.add(y)
        db.session.commit()

        # Crear cuenta de Stripe
        account = stripe.Account.create(
            type="express",
            country="US",
            email=email,
            capabilities={"transfers": {"requested": True}},  # ✅
        )

        # Asociar el stripe_account_id
        y.stripe_account_id = account.id
        db.session.commit()

        # Crear link de onboarding
        account_link = _create_onboarding_link(account.id)

        print("✅ Youtuber creado correctamente.")
        print("🧾 Referrer code:", y.referrer_code)
        print("🏦 Stripe account:", y.stripe_account_id)
        print("🔗 Enlace de onboarding:")
        print(account_link.url)

if __name__ == "__main__":
    email_input = input("📧 Ingresá el email del youtuber: ")
    crear_youtuber(email_input.strip())
