from django.db import models

class Profile(models.Model):
    name = models.CharField(max_length=255)
    birth_date = models.DateField()
    bio = models.TextField()
    email = models.EmailField()
    phone = models.CharField(max_length=20)
    github = models.URLField(blank=True)
    linkedin = models.URLField(blank=True)
    facebook = models.URLField(blank=True)
    whatsapp = models.CharField(max_length=20, blank=True)
    
    # SEO Fields
    meta_title = models.CharField(max_length=255, blank=True, help_text="SEO title for search engines")
    meta_description = models.TextField(blank=True, help_text="SEO description")
    og_image = models.ImageField(upload_to='seo/', blank=True, null=True)

    def __str__(self):
        return self.name

class Company(models.Model):
    name = models.CharField(max_length=255)
    slug = models.SlugField(unique=True, blank=True)
    role = models.CharField(max_length=255, default="CEO")
    location = models.CharField(max_length=255)
    established_date = models.CharField(max_length=100)
    website_url = models.URLField()
    description = models.TextField(blank=True)
    
    # SEO Fields
    meta_title = models.CharField(max_length=255, blank=True)
    meta_description = models.TextField(blank=True)

    class Meta:
        verbose_name_plural = "Companies"

    def __str__(self):
        return self.name

class Skill(models.Model):
    CATEGORY_CHOICES = [
        ('language', 'Language'),
        ('framework', 'Framework / Library'),
        ('ai', 'AI / ML'),
        ('tool', 'Tool / Architecture'),
    ]
    name = models.CharField(max_length=100)
    category = models.CharField(max_length=20, choices=CATEGORY_CHOICES)
    proficiency = models.PositiveIntegerField(help_text="0 to 100")
    color = models.CharField(max_length=20, default="blue-600", help_text="Tailwind color class")

    def __str__(self):
        return self.name

class Project(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField(unique=True)
    description = models.TextField()
    image = models.ImageField(upload_to='projects/', blank=True, null=True)
    tech_stack = models.CharField(max_length=255, help_text="Comma separated tags")
    live_url = models.URLField(blank=True)
    github_url = models.URLField(blank=True)
    featured = models.BooleanField(default=False)
    order = models.PositiveIntegerField(default=0)

    class Meta:
        ordering = ['order', '-id']

    def __str__(self):
        return self.title

class Education(models.Model):
    institution = models.CharField(max_length=255)
    degree = models.CharField(max_length=255)
    period = models.CharField(max_length=100)
    description = models.TextField(blank=True)

    class Meta:
        verbose_name_plural = "Education"

    def __str__(self):
        return f"{self.degree} - {self.institution}"

class Service(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField()
    icon = models.CharField(max_length=100, help_text="Lucide or FontAwesome icon name")
    order = models.PositiveIntegerField(default=0)

    def __str__(self):
        return self.title

class Testimonial(models.Model):
    client_name = models.CharField(max_length=255)
    country_name = models.CharField(max_length=100, blank=True)
    country_code = models.CharField(max_length=10, blank=True, help_text="ISO code for flag (e.g. US, HK)")
    tagline = models.CharField(max_length=255, blank=True, help_text="e.g. Architecture Mastery")
    quote = models.TextField()
    image = models.ImageField(upload_to='testimonials/', blank=True, null=True)

    def __str__(self):
        return self.client_name

class Brand(models.Model):
    name = models.CharField(max_length=255)
    logo = models.ImageField(upload_to='brands/', blank=True, null=True)
    website_url = models.URLField(blank=True)
    order = models.PositiveIntegerField(default=0)

    class Meta:
        ordering = ['order', 'name']

    def __str__(self):
        return self.name

class ContactMessage(models.Model):
    name = models.CharField(max_length=255)
    email = models.EmailField()
    phone = models.CharField(max_length=50, blank=True, null=True)
    subject = models.CharField(max_length=255)
    message = models.TextField()
    ip_address = models.GenericIPAddressField(null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"Message from {self.name} - {self.subject}"

class IPRateLimit(models.Model):
    ip_address = models.GenericIPAddressField(unique=True)
    count = models.PositiveIntegerField(default=0)
    last_reset = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f"{self.ip_address} - {self.count} hits"
