from django.db import models
from accounts.models import User

class Participation(models.Model):
    class PresentationType(models.TextChoices):
        ORAL = 'ORAL', 'Oral'
        POSTER = 'POSTER', 'Poster'
        LISTENER = 'LISTENER', 'Listener'

    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='participation')
    presentation_type = models.CharField(max_length=20, choices=PresentationType.choices, blank=True, null=True)
    theme = models.CharField(max_length=200, blank=True, null=True)
    abstract_title = models.CharField(max_length=500, blank=True, null=True)
    authors = models.CharField(max_length=500, blank=True, null=True)
    keywords = models.CharField(max_length=500, blank=True, null=True)
    presentation_category = models.CharField(max_length=200, blank=True, null=True)

    def __str__(self):
        return f"{self.user.email} - {self.presentation_type}"

class Trip(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='trip')
    join_trip = models.BooleanField(default=False)
    
    def __str__(self):
        return f"{self.user.email} - Trip: {self.join_trip}"

class Payment(models.Model):
    class PaymentStatus(models.TextChoices):
        PENDING = 'PENDING', 'Pending Verification'
        VERIFIED = 'VERIFIED', 'Verified'
        REJECTED = 'REJECTED', 'Rejected'
        
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='payment')
    screenshot = models.ImageField(upload_to='payments/', blank=True, null=True)
    transaction_number = models.CharField(max_length=100, blank=True, null=True)
    utr = models.CharField(max_length=100, blank=True, null=True)
    payment_date = models.DateField(blank=True, null=True)
    status = models.CharField(max_length=20, choices=PaymentStatus.choices, default=PaymentStatus.PENDING)
    
    def __str__(self):
        return f"{self.user.email} - {self.status}"

class Abstract(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='abstract')
    file = models.FileField(upload_to='abstracts/', blank=True, null=True)
    version = models.IntegerField(default=1)
    uploaded_at = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return f"{self.user.email} - v{self.version}"

class RegistrationReview(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='review')
    is_submitted = models.BooleanField(default=False)
    submitted_at = models.DateTimeField(blank=True, null=True)
    
    # Admin Approval Fields
    is_approved = models.BooleanField(default=False)
    approved_at = models.DateTimeField(blank=True, null=True)
    registration_id = models.CharField(max_length=50, blank=True, null=True, unique=True)
    rejection_reason = models.TextField(blank=True, null=True)
    
    def __str__(self):
        return f"{self.user.email} - Submitted: {self.is_submitted}"
