from sqlalchemy import Column, Integer, String, Date, Float, Text, ForeignKey, Boolean,DateTime, null
from sqlalchemy.orm import relationship
from datetime import datetime
from models.base import Base, TimestampMixin


class Event(Base, TimestampMixin):
    __tablename__ = "events"

    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(255), nullable=False)
    event_start_date = Column(Date, nullable=False)
    event_end_date = Column(Date, nullable=True)
    event_start_time = Column(String(50), nullable=False)
    event_end_time = Column(String(50), nullable=True)
    price = Column(Float, nullable=False)
    description = Column(String(500), nullable=False)
    location = Column(String(255), nullable=False)
    image = Column(Text, nullable=True)

    @property
    def image_url(self):
        if self.image:
            return f"/images/{self.image}"
        return self.image

class EventParticipant(Base, TimestampMixin):
    __tablename__ = 'event_participant'
    id = Column(Integer, primary_key=True, autoincrement=True)
    event_id = Column(Integer, ForeignKey('events.id'), nullable=False)
    name = Column(String(255),nullable=False)
    image = Column(Text,nullable=True)
    
    @property
    def image_url(self):
        if self.image:
            return f"/images/{self.image}"
        return self.image

class EventCart(Base, TimestampMixin):
    __tablename__ = "event_cart"
    
    id = Column(Integer, primary_key=True, autoincrement=True)
    user_id = Column(Integer, nullable=False)
    user_type = Column(String(255), nullable=True)
    event_id = Column(Integer, ForeignKey('events.id'), nullable=False)
    no_of_participants = Column(Integer, nullable=False)
    total_amount = Column(Float, nullable=False)
    is_cart_processed = Column(Boolean, default=False)
    transaction_batch_id = Column(String, nullable=True)
    event=relationship("Event",backref="event_cart")
    
    

class EventPayment(Base, TimestampMixin):
    __tablename__ = 'event_payments'
    
    id = Column(Integer, primary_key=True)
   
    user_id = Column(Integer)
    user_type = Column(String(255), nullable=True)
    transaction_batch_id = Column(String)
    total_amount = Column(Float)
    discount_amount = Column(Float,nullable=True)
    used_wallet_amount = Column(Float,nullable=True)
    stripe_url = Column(String)
    is_payment_completed = Column(Boolean, default=False)
    payment_status = Column(String)
    payment_method = Column(String)
    paid_on = Column(DateTime, default=datetime.now)
    payment_id = Column(String,nullable=True)
    coupon_discounted_amount = Column(Float)
    discount_coupon_id = Column(Integer, ForeignKey('discount_coupons.id'), nullable=True)
    discount_coupon = relationship("DiscountCoupon")

    
    