from django.db import models
from PIL import Image

class LandingContent(models.Model):
    dynamics_img = models.ImageField(default='p_dynamics.webp', upload_to='landing_assets')
    dynamics_blurb = models.CharField(max_length=200)
    pixels_img = models.ImageField(default='p_pixels.webp', upload_to='landing_assets')
    pixels_blurb = models.CharField(max_length=200)
    why_wait = models.CharField(max_length=200)

    class Meta:
        verbose_name = 'Landing Page Content'
        verbose_name_plural = 'Landing Page Contents'

    def __str__(self):
        return 'Landing Page'
    
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        # Define max size for images
        max_size = (460, 460)

        # List of image fields to process
        image_fields = ['dynamics_img', 'pixels_img']

        for field_name in image_fields:
            image_field = getattr(self, field_name)

            if image_field and hasattr(image_field, 'path'):  # Ensure image exists
                img = Image.open(image_field.path)

                if img.height > max_size[1] or img.width > max_size[0]:
                    img.thumbnail(max_size)
                    img.save(image_field.path)

class AboutContent(models.Model):
    about_content = models.TextField()
    about_img = models.ImageField(default='about.webp', upload_to='about_assets')
    dynamics = models.TextField()
    banner_img = models.ImageField(default='abt_banner.webp', upload_to='about_assets')
    pixels = models.TextField()

    class Meta:
        verbose_name = 'About Page Content'
        verbose_name_plural = 'About Page Contents'

    def __str__(self):
        return 'About Page'
    
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        # Define max size for images
        max_size = (1440, 500)

        # List of image fields to process
        image_fields = ['about_img', 'banner_img']

        for field_name in image_fields:
            image_field = getattr(self, field_name)

            if image_field and hasattr(image_field, 'path'):  # Ensure image exists
                img = Image.open(image_field.path)

                if img.height > max_size[1] or img.width > max_size[0]:
                    img.thumbnail(max_size)
                    img.save(image_field.path)

class DynamicsContent(models.Model):
    d_hero = models.ImageField(default='d_hero.webp', upload_to='dynamics_assets')

    tailored_content = models.TextField()
    tailored_img = models.ImageField(default='tailored.webp', upload_to='dynamics_assets')

    banner_one = models.ImageField(default='d_banner1.webp', upload_to='dynamics_assets')

    banner_two = models.ImageField(default='d_banner2.webp', upload_to='dynamics_assets')

    contact_img = models.ImageField(default='d_contact.webp', upload_to='dynamics_assets')

    class Meta:
        verbose_name = 'Dynamics Page Content'
        verbose_name_plural = 'Dynamics Page Contents'

    def __str__(self):
        return 'Dynamics Page'
    
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        # Define max size for images
        max_size = (1440, 500)

        # List of image fields to process
        image_fields = ['d_hero', 'tailored_img', 'banner_one', 'banner_two', 'contact_img']

        for field_name in image_fields:
            image_field = getattr(self, field_name)

            if image_field and hasattr(image_field, 'path'):  # Ensure image exists
                img = Image.open(image_field.path)

                if img.height > max_size[1] or img.width > max_size[0]:
                    img.thumbnail(max_size)
                    img.save(image_field.path)

class DynamicsSections(models.Model):
    OPTIONS = [
        ('proj', 'proj'),
        ('prog', 'prog'),
        ('cons', 'cons'),
    ]

    section_name = models.CharField(max_length=30)
    blurb = models.TextField()
    content = models.TextField()
    content2 = models.TextField()
    img1 = models.ImageField(default='img1.webp', upload_to='dynamics_assets')
    img2 = models.ImageField(default='img2.webp', upload_to='dynamics_assets')
    section = models.CharField(max_length=10, choices=OPTIONS)

    class Meta:
        verbose_name = 'Dynamics Page Services'
        verbose_name_plural = 'Dynamics Page Services'

    def __str__(self):
        return self.section_name
    
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        # Define max size for images
        max_size = (1440, 500)

        # List of image fields to process
        image_fields = ['img1', 'img2']

        for field_name in image_fields:
            image_field = getattr(self, field_name)

            if image_field and hasattr(image_field, 'path'):  # Ensure image exists
                img = Image.open(image_field.path)

                if img.height > max_size[1] or img.width > max_size[0]:
                    img.thumbnail(max_size)
                    img.save(image_field.path)

class PixelsContent(models.Model):
    p_hero = models.ImageField(default='p_hero.webp', upload_to='pixels_assets')

    tailored_content = models.TextField()
    tailored_img = models.ImageField(default='tailored.webp', upload_to='pixels_assets')

    banner_one = models.ImageField(default='p_banner1.webp', upload_to='pixels_assets')

    design_blurb = models.TextField()
    design = models.TextField()
    des_img = models.ImageField(default='des_img1.webp', upload_to='pixels_assets')
    
    dev_blurb = models.TextField()
    dev = models.TextField()
    dev_img = models.ImageField(default='dev_img1.webp', upload_to='pixels_assets')
    
    deploy_blurb = models.TextField()
    deploy = models.TextField()
    dep_img = models.ImageField(default='dep_img1.webp', upload_to='pixels_assets')

    contact_img = models.ImageField(default='d_contact.webp', upload_to='dynamics_assets')

    class Meta:
        verbose_name = 'Pixels Page Content'
        verbose_name_plural = 'Pixels Page Contents'

    def __str__(self):
        return 'Pixels Page'
    
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        # Define max size for images
        max_size = (1440, 500)

        # List of image fields to process
        image_fields = ['p_hero', 'tailored_img', 'banner_one', 'des_img', 'dev_img', 'dep_img', 'contact_img']

        for field_name in image_fields:
            image_field = getattr(self, field_name)

            if image_field and hasattr(image_field, 'path'):  # Ensure image exists
                img = Image.open(image_field.path)

                if img.height > max_size[1] or img.width > max_size[0]:
                    img.thumbnail(max_size)
                    img.save(image_field.path)

class WhyChoose(models.Model):
    icon_img = models.ImageField(default='tailored.webp', upload_to='whyChoose_assets')
    heading = models.CharField(max_length=15)
    blurb = models.CharField(max_length=150)
    dynamics = models.BooleanField(default=False)
    pixels = models.BooleanField(default=False)


    class Meta:
        verbose_name = 'Why Choose Us Content'
        verbose_name_plural = 'Why Choose Us Contents'

    def __str__(self):
        return self.heading

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs) 

        img = Image.open(self.icon_img.path)

        # checking image dimensions
        if img.height > 90 or img.width > 90:
            # resizing the image
            output_size = (90, 90)
            img.thumbnail(output_size)
            img.save(self.icon_img.path) # this overrides the larger image

class ContactContent(models.Model):
    contact_content = models.TextField()
    contact_img = models.ImageField(default='contact.webp', upload_to='contact_assets')

    class Meta:
        verbose_name = 'Contact Content'
        verbose_name_plural = 'Contact Contents'

    def __str__(self):
        return 'Contact Content'

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs) 

        img = Image.open(self.contact_img.path)

        # checking image dimensions
        if img.height > 380 or img.width > 460:
            # resizing the image
            output_size = (460, 380)
            img.thumbnail(output_size)
            img.save(self.contact_img.path) # this overrides the larger image

class Clients(models.Model):
    name = models.CharField(max_length=25)
    link = models.URLField()
    client_logo = models.ImageField(default='client_logo', upload_to='about_assets')

    class Meta:
        verbose_name = 'Client Content'
        verbose_name_plural = 'Client Contents'

    def __str__(self):
        return self.name
    
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs) 

        img = Image.open(self.client_logo.path)

        # checking image dimensions
        if img.height > 150 or img.width > 200:
            # resizing the image
            output_size = (200, 150)
            img.thumbnail(output_size)
            img.save(self.client_logo.path) # this overrides the larger image

class Newsletter(models.Model):
    name = models.CharField(max_length=50)
    surname = models.CharField(max_length=50)
    email = models.EmailField(unique=True)

    class Meta:
        verbose_name = 'Emails'
        verbose_name_plural = 'Emails'

    def __str__(self):
        return f'{self.name} {self.surname}' 
