# models.py
from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin
from datetime import datetime, timezone

db = SQLAlchemy()

# -------------------------
# Modelo de usuarios (suscriptores)
# -------------------------

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(150), unique=True, nullable=False)
    email = db.Column(db.String(150), unique=True, nullable=False)
    password = db.Column(db.String(256), nullable=False)
    is_member = db.Column(db.Boolean, default=False) 
    subscription_id = db.Column(db.String(100), nullable=True)
    membership_type = db.Column(db.String(20), nullable=True) 
    created_at = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc))
    session_token = db.Column(db.String(256), nullable=True) 
    is_verified = db.Column(db.Boolean, default=False)

    contracts_per_trade = db.Column(db.Integer, default=1)
    commission_per_leg = db.Column(db.Float, default=0.50)
    preferred_language = db.Column(db.String(10), default='en')
    theme_mode = db.Column(db.String(10), default='dark')

    referrer_code = db.Column(db.String(150), nullable=True)
    phone = db.Column(db.String(20), nullable=True)
    how_heard = db.Column(db.String(250), nullable=True)

    def __repr__(self):
        return f'<User {self.username}>'

# -------------------------
# Modelo de youtubers afiliados
# -------------------------
class Youtuber(db.Model):
    __tablename__ = "youtubers"

    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True, nullable=False)
    referrer_code = db.Column(db.String(50), unique=True, nullable=False)
    stripe_account_id = db.Column(db.String(100), nullable=True)

    # monthly_price_id = db.Column(db.String(100), nullable=True)
    # annual_price_id  = db.Column(db.String(100), nullable=True)
    commission_percent = db.Column(db.Float, default=10.0)
    stripe_coupon_id = db.Column(db.String(100), nullable=True) 


    def __repr__(self):
        return f"<Youtuber {self.email}>"