import random
import string
from datetime import datetime
from mongoengine import Document, StringField, IntField, DateTimeField

def generate_coupon_code(length=8):
    """Generate a random alphanumeric coupon code"""
    return ''.join(random.choices(string.ascii_uppercase + string.digits, k=length))

class Coupon(Document):
    coupon_title = StringField(required=True)
    # coupon_code = StringField(unique=True, default=generate_coupon_code) 
    coupon_code = StringField(unique=True) 
    coupon_type = StringField(required=True, choices=['flat', 'percentage'])
    coupon_value = IntField(required=True, min_value=1, max_value=100)  # Flat amount OR percentage
    coupon_start_date = DateTimeField(required=True)
    coupon_end_date = DateTimeField(required=True)
    status = IntField(default=1, choices=[0, 1])  # 1=Active, 0=Inactive
    created_date = DateTimeField(default=datetime.utcnow)

    meta = {
        'collection': 'coupons',
        'indexes': ['coupon_code', 'status']
    }

    def to_json(self):
        return {
            'id': str(self.id),
            'coupon_title': self.coupon_title,
            'coupon_code': self.coupon_code,
            'coupon_type': self.coupon_type,
            'coupon_value': self.coupon_value,
            'coupon_start_date': self.coupon_start_date.strftime("%d-%m-%Y") if self.coupon_start_date else None,
            'coupon_end_date': self.coupon_end_date.strftime("%d-%m-%Y") if self.coupon_end_date else None,
            'status': self.status,
    'created_date': self.created_date.isoformat() if self.created_date else None
}