from django.db import models

from apps.core.models import TimeStampedModel


class BlogPost(TimeStampedModel):
    slug = models.SlugField(unique=True)
    title = models.CharField(max_length=220)
    excerpt = models.TextField()
    category = models.CharField(max_length=80)
    published_on = models.DateField()
    read_time = models.CharField(max_length=32, blank=True)
    image = models.CharField(max_length=500, blank=True)
    image_alt = models.CharField(max_length=220, blank=True)
    featured = models.BooleanField(default=False)
    content = models.JSONField(default=list, blank=True)
    is_published = models.BooleanField(default=True)

    class Meta:
        ordering = ["-published_on"]

    def __str__(self):
        return self.title


class GalleryItem(TimeStampedModel):
    code = models.CharField(max_length=40, unique=True)
    subject = models.CharField(max_length=80)
    title = models.CharField(max_length=180)
    caption = models.CharField(max_length=255, blank=True)
    src = models.CharField(max_length=500)
    alt = models.CharField(max_length=220, blank=True)
    is_published = models.BooleanField(default=True)
    sort_order = models.PositiveSmallIntegerField(default=0)

    class Meta:
        ordering = ["sort_order", "id"]

    def __str__(self):
        return self.title


class ShowcaseVideo(TimeStampedModel):
    code = models.CharField(max_length=40, unique=True)
    category = models.CharField(max_length=80)
    title = models.CharField(max_length=180)
    description = models.TextField(blank=True)
    duration = models.CharField(max_length=16, blank=True)
    poster = models.CharField(max_length=500, blank=True)
    poster_alt = models.CharField(max_length=220, blank=True)
    youtube_id = models.CharField(max_length=32)
    featured = models.BooleanField(default=False)
    is_published = models.BooleanField(default=True)
    sort_order = models.PositiveSmallIntegerField(default=0)

    class Meta:
        ordering = ["sort_order", "id"]

    def __str__(self):
        return self.title


class LeadershipProfile(TimeStampedModel):
    code = models.CharField(max_length=40, unique=True)
    role = models.CharField(max_length=80)
    title = models.CharField(max_length=120)
    name = models.CharField(max_length=180)
    short_name = models.CharField(max_length=80, blank=True)
    photo = models.CharField(max_length=500, blank=True)
    signature = models.CharField(max_length=120, blank=True)
    message = models.TextField(blank=True)
    vision = models.TextField(blank=True)
    responsibilities = models.JSONField(default=list, blank=True)
    profile = models.TextField(blank=True)
    sort_order = models.PositiveSmallIntegerField(default=0)
    is_published = models.BooleanField(default=True)

    class Meta:
        ordering = ["sort_order", "id"]

    def __str__(self):
        return self.role


class TeamMember(TimeStampedModel):
    code = models.CharField(max_length=40, unique=True)
    name = models.CharField(max_length=180)
    position = models.CharField(max_length=120)
    education = models.CharField(max_length=255, blank=True)
    certifications = models.JSONField(default=list, blank=True)
    experience = models.CharField(max_length=255, blank=True)
    specialization = models.TextField(blank=True)
    major_projects = models.JSONField(default=list, blank=True)
    skills = models.JSONField(default=list, blank=True)
    photo = models.CharField(max_length=255, blank=True)
    sort_order = models.PositiveSmallIntegerField(default=0)
    is_published = models.BooleanField(default=True)

    class Meta:
        ordering = ["sort_order", "id"]

    def __str__(self):
        return f"{self.name} · {self.position}"


class CompanyProfileSection(TimeStampedModel):
    code = models.CharField(max_length=40, unique=True)
    title = models.CharField(max_length=180)
    summary = models.TextField()
    highlights = models.JSONField(default=list, blank=True)
    body = models.JSONField(default=list, blank=True)
    subsections = models.JSONField(default=list, blank=True)
    sort_order = models.PositiveSmallIntegerField(default=0)
    is_published = models.BooleanField(default=True)

    class Meta:
        ordering = ["sort_order", "id"]

    def __str__(self):
        return self.title


class ContactInquiry(TimeStampedModel):
    class Interest(models.TextChoices):
        INVESTING = "investing", "I'm interested in investing"
        PROJECT = "project", "I'm interested in a project"
        PARTNERSHIP = "partnership", "I'm interested in partnership"
        PROPERTY = "property", "I'm looking for property"
        CORPORATE = "corporate", "I want corporate information"
        INNOVATION = "innovation", "I want to discuss an innovation"

    class Status(models.TextChoices):
        NEW = "new", "New"
        IN_REVIEW = "in_review", "In review"
        CLOSED = "closed", "Closed"

    name = models.CharField(max_length=180)
    country = models.CharField(max_length=120)
    email = models.EmailField()
    mobile = models.CharField(max_length=40)
    interest = models.CharField(max_length=32, choices=Interest.choices)
    investment_range = models.CharField(max_length=80, blank=True)
    message = models.TextField()
    status = models.CharField(max_length=16, choices=Status.choices, default=Status.NEW)

    class Meta:
        ordering = ["-created_at"]
        verbose_name_plural = "Contact inquiries"

    def __str__(self):
        return f"{self.name} · {self.interest}"
