from django.conf import settings
from django.db import models

from apps.core.models import TimeStampedModel, Visibility


class EventType(models.TextChoices):
    INVESTMENT = "investment", "Investment"
    CONSTRUCTION = "construction", "Construction"
    EXPENSE = "expense", "Expense"
    REVENUE = "revenue", "Revenue"
    PROGRESS = "progress", "Progress"
    DOCUMENT = "document", "Documents"
    BENEFIT = "benefit", "Investor Benefits"
    GENERAL = "general", "General"


class TransparencyPeriod(models.TextChoices):
    DAILY = "daily", "Daily"
    MONTHLY = "monthly", "Monthly"
    YEARLY = "yearly", "Yearly"


class TransparencyEvent(TimeStampedModel):
    project = models.ForeignKey("projects.Project", on_delete=models.CASCADE, related_name="transparency_events")
    event_type = models.CharField(max_length=20, choices=EventType.choices)
    title = models.CharField(max_length=180)
    description = models.TextField(blank=True)
    occurred_at = models.DateTimeField()
    progress_percent = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)
    visibility = models.CharField(max_length=16, choices=Visibility.choices, default=Visibility.INVESTOR)
    period = models.CharField(max_length=16, choices=TransparencyPeriod.choices, default=TransparencyPeriod.DAILY)
    stamp_label = models.CharField(max_length=80, blank=True)
    department = models.CharField(max_length=80, blank=True)
    related_document = models.ForeignKey(
        "documents.Document",
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name="transparency_events",
    )
    created_by = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name="transparency_events",
    )

    class Meta:
        ordering = ["-occurred_at"]

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