from django.db import models
from ckeditor_uploader.fields import RichTextUploadingField
from ckeditor.fields import RichTextField
from django.contrib.auth.models import User
# # from tinymce.models import HTMLField
from .validators import validate_file_size
from django.core.validators import FileExtensionValidator
from django.utils import timezone
from django.urls import reverse
from django.utils.text import slugify
from embed_video.fields import EmbedVideoField
from django_ckeditor_5.fields import CKEditor5Field


# # # Create your models here.

# # ##################################################### CONTACT ####################################
function = (    ('function','function'),
                ('Wedding Ceremony','Wedding Ceremony'),
                ('Cocktail Ceremony','Cocktail Ceremony,'),
                ('Birthday','Birthday'),
                ('Social Event','Social Events'),
                ('Corporate','Corporate'),
                ('Ring Ceremony','Ring Ceremony'),
                ('Mehendi Ceremony','Mehendi Ceremony'),
                ('Wedding Reception','Wedding Reception'),
                ('Sangeet Ceremony', 'Sangeet Ceremony'),
                )

        
class ContactModel(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField(null=True, blank=True)
    function = models.CharField(choices=function, default='function' ,max_length=80)
    date= models.DateField()
    budget = models.CharField(max_length=100)
    venue=models.CharField(max_length=100)
    phone = models.CharField(max_length=10)
    message = models.CharField(max_length=100)
    capacity = models.CharField(max_length=100)
    
    def __str__(self):
        return self.name
        


# # ########################################## ABOUT US ###################################################

class Aboutus(models.Model):
    first_content =  RichTextField()
    image = models.ImageField(upload_to='aboutus')
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    second_heading = models.CharField(max_length=100)
    second_content = RichTextField(null=True)
    third_heading = models.CharField(max_length=100)
    third_content = RichTextField(null=True)
    
    
# # ####################################### SLIDER ##########################################

class Slider(models.Model):
    banner_title = models.CharField(max_length=100)
    banner_subtitle = models.CharField(max_length=100)
    banner_image = models.ImageField(upload_to='banner_image')
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    banner_link = models.CharField(max_length=100, null=True,blank=True)

    def __str__(self):
        return self.banner_title
        
        
# # ####################### CLIENTLELE  #########################

class Venue(models.Model):
    venue_name = models.CharField(max_length=100)
    venue_image = models.ImageField(upload_to='venue')
    alt_text = models.CharField(max_length=100, null=True, blank=True)

    def __str__(self):
        return self.venue_name


# # #########################  CORPORATE ########################

class Corporate(models.Model):
    corporate_image = models.ImageField(upload_to='corporate')
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    
    
class Goverment_Organization(models.Model):
    goverment_organization_image = models.ImageField(upload_to='goverment_organization_image')
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    
# # ######################   TESTIMONIAL ###############################

class Testimonial(models.Model):
    image = models.ImageField(
        upload_to='testimonials/',
        help_text="Upload testimonial image", null=True,blank=True
    )
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True)

    class Meta:
        ordering = ['-created_at']
        verbose_name = "Testimonial"
        verbose_name_plural = "Testimonials"

    def __str__(self):
        return f"Testimonial #{self.id}"



from django.db import models

class VideoTestimonial(models.Model):
    name = models.CharField(max_length=100)
    designation = models.CharField(max_length=100)
    video = models.FileField(upload_to='video_testimonials/')
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name
            
    
    
# # #################### PORTFOLIO ################################

class Portfolio(models.Model):
    client_name = models.CharField(max_length=100)
    function_date = models.DateField()
    venue = models.CharField(max_length=100)
    theme = models.CharField(max_length=100,null=True,blank=True)
    image = models.ImageField(upload_to='portfolio')
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    rank_choose = (
        ('Automatic','Automatic'),
        ('Re-arrange','Re-arrange'),
        ('Replace','Replace')
        )
    rank = models.CharField(choices=rank_choose,max_length=20,null=True,blank=True)


    def __str__(self):
        return self.client_name
        
        
# # ##################### GALLERY#############################

class Gallery_Category(models.Model):
    name = models.CharField(max_length=100)
    alt_text = models.CharField(max_length=100, null=True, blank=True)

    def __str__(self):
        return self.name

class Gallery(models.Model):
    gallery_category = models.ForeignKey('Gallery_Category',on_delete=models.CASCADE, blank = True)
    images = models.ImageField(upload_to='gallery')
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    
    
# # ############################################# FUNCTION ###############################


class AddFunctionModel(models.Model):
    function_name = models.CharField(max_length=100)
    title = models.CharField(max_length=100, null=True, blank=True)
    meta_title = models.CharField(max_length=100)
    meta_keywords = models.CharField(max_length=100)
    meta_description = models.CharField(max_length=100)
    slug = models.SlugField(null=True,blank=True,default=True)

    def get_absolute_url(self):
        return reverse('package-detail',args=[self.slug])

    class Meta:
        ordering = ['-function_name',]

    def __str__(self):
        return self.function_name



class FunctionModel(models.Model):
    function_name = models.CharField(max_length=100, null=True, blank=True)
    title = models.CharField(max_length=100,null=True,blank=True)
    meta_title = models.CharField(max_length=200)
    slug = models.SlugField()
    og_url = models.CharField(max_length=200,null=True,blank=True)
    alt_text = models.CharField(max_length=200, null=True, blank=True)
    og_image_url = models.CharField(max_length=200)
    og_description = models.CharField(max_length=200)
    content_noodp = models.CharField(max_length=200)
    short_content =  RichTextField(null=True)
    function_content =  RichTextField(null=True)
    meta_keywords = models.CharField(max_length=200)
    meta_description = models.CharField(max_length=200)
    canonical = models.CharField(max_length=200)
    og_type = models.CharField(max_length=200)
    og_title = models.CharField(max_length=200)
    og_site_name = models.CharField(max_length=200)
    occasion_thumbnail = models.ImageField(upload_to='occasion_thumbnail')
    gallery_image = models.ImageField(upload_to='gallery_image',null=True, blank=True)
    blog_category = models.ForeignKey('BlogCategoryModel', on_delete=models.CASCADE, null=True,blank=True)
    # faq_q = models.TextField()
    # faq_ans = models.TextField()
    is_draft = models.BooleanField(default=False)
    date = models.DateTimeField(auto_now_add=True, null=True)
    publish = models.DateTimeField(default=timezone.now)

    def get_absolute_url(self):
        return reverse('menuApp:function-single',args=[self.slug])

    class Meta:
        ordering = ['date',]

    def __str__(self):
        return self.title
        
        

class myfuncgallery(models.Model):
    page = models.ForeignKey('FunctionModel',on_delete=models.CASCADE, blank = True)
    gallery_image=models.ImageField(upload_to="gallery_function")
    alt_text = models.CharField(max_length=100, null=True, blank=True)

class Faqmodel(models.Model):
    page = models.ForeignKey('FunctionModel', on_delete=models.CASCADE, blank=True)
    faq_question = models.TextField()
    faq_answer = models.TextField()
    
class BlogCategoryModel(models.Model):
    name = models.CharField(max_length=100)
    date = models.DateTimeField(auto_now_add=True, null=True)

    def __str__(self):
        return self.name
        
        

# # ################################# BLOG #################################################


class AuthorProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    email = models.EmailField()
    about = models.TextField()
    photo = models.ImageField(upload_to='author')
    gender_choice = (
        ('male', 'Male'),
        ('female', 'Female')
    )
    gender = models.CharField(choices=gender_choice, max_length=6)
    website = models.SlugField(blank=True, null=True)
    facebook = models.SlugField(blank=True, null=True)
    twitter = models.SlugField(blank=True, null=True)
    linkedin = models.SlugField(blank=True, null=True)
    date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name


class Post(models.Model):
    title = models.CharField(max_length=200)
    subtitle = models.CharField(max_length=200, null=True, blank=True)
    blog_description = models.TextField(null=True)
    photo = models.ImageField(upload_to='post')
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    content = RichTextField()
    category = models.ForeignKey('BlogCategoryModel', on_delete=models.CASCADE)
    slug = models.TextField(null=True, unique=True)
    author = models.ForeignKey(AuthorProfile, on_delete=models.CASCADE)
    is_draft = models.BooleanField(default=False)
    publish = models.DateTimeField(default=timezone.now)

    def get_absolute_url(self):
        return reverse_lazy('post-details', args=[self.slug])

    class Meta:
        ordering = ['-publish',]

    def __str__(self):
        return self.title


class BlogComment(models.Model):
    post = models.ForeignKey(Post,on_delete=models.CASCADE)
    # user = models.ForeignKey(User, on_delete=models.CASCADE)
    email = models.EmailField(max_length=100, null=True,blank=True)
    website = models.CharField(max_length=100, null=True,blank=True)
    comment = models.TextField(max_length=200)
    full_name =models.CharField(max_length=100, null=True,blank=True)
    timestamp = models.DateTimeField(auto_now_add=True)
    verify = models.BooleanField(default=False)


    def __str__(self):
        return self.comment
        
# # ##########################USP ##########################
class USP(models.Model):
    des1 = models.CharField(max_length=100)
    des2 = models.CharField(max_length=100)
    des3 = models.CharField(max_length=100)
    des4 = models.CharField(max_length=100)
    des5 = models.CharField(max_length=100)
    des6 = models.CharField(max_length=100)

# #  ######################### HOME CONTENT ######################    
class Homecontent(models.Model):
    title = models.CharField(max_length=100, null=True)
    content = RichTextField()
    
    def __str__(self):
        return self.title
    

# # ######################### SOCIAL MEDIA ###############################
class SocialMedia(models.Model):
    facebook = models.URLField()
    instagram = models.URLField()
    twitter = models.URLField()
    youtube = models.URLField()
    
    
class Category(models.Model):
    name = models.CharField(max_length=50, unique=True)
    date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name
        
        
        
# # ################### CUISINE ###############################

class Cuisine(models.Model):
    title = models.CharField(max_length=100)
    og_url = models.CharField(max_length=100,null=True,blank=True)
    og_image_url = models.CharField(max_length=100,null=True,blank=True)
    og_description = models.CharField(max_length=100,null=True,blank=True)
    content_noodp = models.CharField(max_length=100,null=True,blank=True)
    keyword = models.CharField(max_length=100,null=True,blank=True)
    seo_description = models.CharField(max_length=500,null=True,blank=True)
    meta_keywords = models.CharField(max_length=100,null=True,blank=True)
    meta_title = models.CharField(max_length=100,null=True,blank=True)
    meta_description = models.CharField(max_length=500, null=True,blank=True)
    canonical = models.CharField(max_length=200,null=True,blank=True)
    og_type = models.CharField(max_length=200,null=True,blank=True)
    og_title = models.CharField(max_length=200,null=True,blank=True)
    og_site_name = models.CharField(max_length=200,null=True,blank=True)
    slug = models.SlugField()
    description =  RichTextField(null=True)
    sort_description = models.CharField(max_length=100)
    image = models.ImageField(upload_to='cuisine', null=True)
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    gallery_images = models.FileField(upload_to="gallerycuisine", null=True)
    publish = models.DateTimeField(default=timezone.now)
    
    
    def get_absolute_url(self):
        return reverse('cuisine-detail',args=[self.slug])

    class Meta:
        ordering = ['publish',]

    def __str__(self):
        return self.title



class cuisinegallery(models.Model):
    page = models.ForeignKey('Cuisine',on_delete=models.CASCADE, blank = True)
    gallery_image=models.ImageField(upload_to="gallery_cuisine")
    alt_text = models.CharField(max_length=100, null=True, blank=True)

# ####################################################  CULTURE ###############################

class Culture(models.Model):
    title = models.CharField(max_length=100)
    og_url = models.CharField(max_length=100,null=True,blank=True)
    og_image_url = models.CharField(max_length=100,null=True,blank=True)
    og_description = models.CharField(max_length=100,null=True,blank=True)
    content_noodp = models.CharField(max_length=100,null=True,blank=True)
    keyword = models.CharField(max_length=100,null=True,blank=True)
    seo_description = models.CharField(max_length=100,null=True,blank=True)
    meta_keywords = models.CharField(max_length=100,null=True,blank=True)
    meta_title = models.CharField(max_length=100,null=True,blank=True)
    meta_description = models.CharField(max_length=100, null=True,blank=True)
    canonical = models.CharField(max_length=200,null=True,blank=True)
    og_type = models.CharField(max_length=200,null=True,blank=True)
    og_title = models.CharField(max_length=200,null=True,blank=True)
    og_site_name = models.CharField(max_length=200,null=True,blank=True)
    meta_keywords = models.CharField(max_length=100,default=True, null=True)
    meta_title = models.CharField(max_length=100,default=True, null=True)
    meta_description = models.CharField(max_length=100,default=True, null=True)
    slug = models.SlugField()
    description =  RichTextField(null=True)
    sort_description = models.CharField(max_length=100)
    image= models.ImageField(upload_to='culture')
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    gallery_images = models.FileField(upload_to="galleryculture", null=True)
    publish = models.DateTimeField(default=timezone.now)
    
    
    
    def get_absolute_url(self):
        return reverse('culture-detail',args=[self.slug])

    class Meta:
        ordering = ['publish',]

    def __str__(self):
        return self.title

  

class culturegallery(models.Model):
    page = models.ForeignKey('Culture',on_delete=models.CASCADE, blank = True)
    gallery_image=models.ImageField(upload_to="gallery_culture")
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    
    
class Elements_Of_Menu(models.Model):
    category_of_menu = models.CharField(max_length=100)
    

    def __str__(self):
        return self.category_of_menu


class Add_Elements(models.Model):
    category_name = models.ForeignKey('Elements_Of_Menu',on_delete=models.CASCADE, blank = True, null=True)
    name = models.CharField(max_length=100)
    description = RichTextField(null=True)
    image = models.ImageField(upload_to='category_of_menu')
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    slug = models.SlugField(null=True,blank=True,default=True)
    date= models.DateTimeField(auto_now_add=True)

    def get_absolute_url(self):
        return reverse('element_menu',args=[self.slug])

    class Meta:
        ordering = ['date',]

    def __str__(self):
        return self.name

class Elementsgallery(models.Model):
    page = models.ForeignKey('Add_Elements',on_delete=models.CASCADE, blank = True)
    gallery_image = models.ImageField(upload_to="gallery_element")
    alt_text = models.CharField(max_length=100, null=True, blank=True)

 

        
class MenuByFunctionModel(models.Model):
    slug = models.ForeignKey('AddFunctionModel', on_delete=models.CASCADE,default=True, null=True, blank=True)
    title = models.ForeignKey('FunctionModel', on_delete=models.CASCADE, default=True, null=True, blank=True)
    # special = models.CharField(max_length=100, null=True, blank=True)
    meta_title = models.CharField(max_length=100)
    meta_keywords = models.CharField(max_length=100)
    menu_name = models.CharField(max_length=100)
    menu_pax = models.CharField(max_length=100)
    menu_item = models.FileField(upload_to="menu_items",max_length=40,validators=[validate_file_size,FileExtensionValidator(allowed_extensions=['.doc','pdf','.docx'])],null=True, blank=True)
    veg_non_veg = (
        ('Veg','Veg'),
        ('Non-Veg','Non-Veg'),
        )
    veg_non_veg = models.CharField(choices=veg_non_veg,max_length=100)
    meta_description = models.CharField(max_length=200)
    menu_price = models.CharField(max_length=100)
    menu_image = models.ImageField(upload_to='menu_image')
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    content = RichTextField(default=True)

    def __str__(self):
        return self.menu_name

class Youtube_Testimonial(models.Model):
    youtube_test = models.URLField(null=True,blank=True)
    
    
class myOccasion(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(null=True)
    og_url = models.CharField(max_length=100,null=True,blank=True)
    og_image_url = models.CharField(max_length=100,null=True,blank=True)
    og_description = models.CharField(max_length=100,null=True,blank=True)
    content_noodp = models.CharField(max_length=100,null=True,blank=True)
    keyword = models.CharField(max_length=100,null=True,blank=True)
    seo_description = models.CharField(max_length=100,null=True,blank=True)
    meta_keywords = models.CharField(max_length=100,null=True,blank=True)
    meta_title = models.CharField(max_length=100,null=True,blank=True)
    meta_description = models.CharField(max_length=100, null=True,blank=True)
    canonical = models.CharField(max_length=200,null=True,blank=True)
    og_type = models.CharField(max_length=200,null=True,blank=True)
    og_title = models.CharField(max_length=200,null=True,blank=True)
    og_site_name = models.CharField(max_length=200,null=True,blank=True)
    meta_keywords = models.CharField(max_length=100,default=True, null=True)
    meta_title = models.CharField(max_length=100,default=True, null=True)
    meta_description = models.CharField(max_length=200,default=True, null=True)
    description = RichTextField()
    sort_description = models.TextField()
    images = models.ImageField(upload_to='occasion')
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    gallery_images = models.FileField(upload_to="galleryoccasion", null=True)

    def get_absolute_url(self):
        return reverse('occasion-detail',args=[self.slug])

    class Meta:
        ordering = ['-title',]

    def __str__(self):
        return self.title

class mygallery(models.Model):
    page = models.ForeignKey('myOccasion',on_delete=models.CASCADE, blank = True)
    gallery_image=models.ImageField(upload_to="gallery_occasion")
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    
class EnquiryModel(models.Model):
    name = models.CharField(max_length=100)
    mobile = models.CharField(max_length=10)
    function = models.CharField(choices=function, default='function' ,max_length=80)
    date= models.DateField()
    capacity = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class CTA(models.Model):
    images = models.ImageField(upload_to='cta')
    alt_text = models.CharField(max_length=500, null=True, blank=True)
    
class tstingapril(models.Model):
    images = models.ImageField(upload_to='testapril')
    alt_text = models.CharField(max_length=100, null=True, blank=True)  


class Blog_Image(models.Model):
    images = models.ImageField(upload_to='blog_imagess')
    alt_text = models.CharField(max_length=100, null=True, blank=True)
    
class Bloggallery(models.Model):
    images = models.ImageField(upload_to='blog_Gallery')
    alt_text = models.CharField(max_length=100, null=True, blank=True)
