from django.db import models
# from dj_static1.utility.image_helper import validate_image_size, validate_required_field
from django.contrib.auth.hashers import make_password, check_password
from django.core.exceptions import ValidationError
import os

def validate_image(file):

    valid_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp']
    ext = os.path.splitext(file.name)[1].lower()
    if ext not in valid_extensions:
        raise ValidationError("Only image files (JPG, JPEG, PNG, GIF, WEBP) are allowed.")
    
    max_size = 2 * 1024 * 1024
    if file.size > max_size:
        raise ValidationError("Image size should not exceed 2 MB.")
class Banner(models.Model):
    TYPE_CHOICES = (
        (1, "home"),
        (2, "about"),
        (3, "services"),
        (4, "projects"),
        (5, "vaastu"),
        (6,"contacts")
    )
    image = models.ImageField(
        upload_to='images/',
        blank=False,
        null=False,
        validators=[validate_image]
    )
    content = models.CharField(
        max_length=1000,
        blank=False,
        null=False
    )
    title = models.CharField(
        max_length=160,
        blank=False,
        null=False
    )
    subtitle = models.CharField(
        max_length=250,
        blank=False,
        null=False
    )
    type = models.IntegerField(choices=TYPE_CHOICES, default=1)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    # def clean(self):
    #     validate_required_field(self.title, "title")
    #     validate_required_field(self.content, "content")
    #     validate_required_field(self.content, "subtitle")
    #     validate_image_size(self.image, max_size_mb=2)


    def __str__(self):
        return self.title
class Admin(models.Model):
    id = models.BigAutoField(primary_key=True)
    name = models.CharField(max_length=160)
    email = models.EmailField(max_length=160, unique=True)
    password = models.CharField(max_length=160)
    contact_no= models.CharField(max_length=160, blank=True, null=True)
    status = models.BooleanField(default=True) 
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name
    def set_password(self, raw_password):
        self.password = make_password(raw_password)

    def check_password(self, raw_password):
        return check_password(raw_password, self.password)
from django.db import models
from django.utils.text import slugify

class Service(models.Model):
    SERVICE_TYPE_CHOICES = [
        (1, 'Commercial'),
        (2, 'Retail'),
        (3, 'Residential'),
    ]

    service_title = models.CharField(max_length=255)
    description = models.TextField(blank=True, null=True)
    image = models.ImageField(upload_to='services/images/', blank=True, null=True)
    slug = models.SlugField(unique=True, blank=True)
    detail_page_title = models.CharField(max_length=255, blank=True, null=True)
    content = models.TextField(blank=True, null=True)  # text editor
    service_type = models.CharField(max_length=50, choices=SERVICE_TYPE_CHOICES, blank=True, null=True)
    featured_image = models.ImageField(upload_to='services/featured/', blank=True, null=True)
    seo_title = models.CharField(max_length=255, blank=True, null=True)
    seo_description = models.TextField(blank=True, null=True)
    status = models.BooleanField(default=True)  # Toggle (Active/Inactive)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.service_title)
        super(Service, self).save(*args, **kwargs)

    def __str__(self):
        return self.service_title
    
class ServiceImage(models.Model):
    service = models.ForeignKey(Service, related_name='images', on_delete=models.CASCADE)
    image = models.ImageField(upload_to='service/multiple/')
    long_description = models.TextField(blank=True, null=True)  # new field for description

class Gallery(models.Model):
    service = models.ForeignKey(Service, on_delete=models.CASCADE, related_name="gallery_images")
    title = models.CharField(max_length=255)
    thumbnail_text = models.TextField(blank=True, null=True)
    image = models.ImageField(upload_to="gallery/")
    status = models.BooleanField(default=True)  # True = Active, False = Inactive
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.title} ({self.service.service_title})"


class Enquiry(models.Model):
    name = models.CharField(max_length=255)
    phone_number = models.CharField(max_length=20)
    email = models.EmailField()
    message = models.TextField()
    status = models.BooleanField(default=False)  # False = unread, True = read
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name
class SEOSetting(models.Model):
    seo_title = models.CharField(max_length=255, help_text="Title for SEO (max 255 chars)")
    meta_keywords = models.TextField(blank=True, null=True, help_text="Comma-separated keywords")
    meta_description = models.TextField(blank=True, null=True, help_text="Meta description for the page")
    url_slug = models.SlugField(unique=True, max_length=255, help_text="SEO-friendly URL slug")
    image = models.ImageField(upload_to="seo_images/", blank=True, null=True)
    updated_at = models.DateTimeField(auto_now=True)

    def save(self, *args, **kwargs):
        if not self.url_slug:
            self.url_slug = slugify(self.seo_title)
        super().save(*args, **kwargs)

    def __str__(self):
        return self.seo_title
    