from django.conf import settings
from django.db import models


class IrrigationInquiry(models.Model):
    full_name = models.CharField(max_length=120)
    email = models.EmailField()
    phone = models.CharField(max_length=20, blank=True)
    location = models.CharField(max_length=150)
    message = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.SET_NULL,
        null=True, blank=True,
        related_name="inquiries",
    )

    def __str__(self) -> str:
        return f"{self.full_name} - {self.location}"


class SurveySubmission(models.Model):
    respondent_name = models.CharField(max_length=200, blank=True)
    mobile = models.CharField(max_length=20, blank=True)
    district = models.CharField(max_length=120, blank=True)
    payload = models.JSONField(default=dict)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.SET_NULL,
        null=True, blank=True,
        related_name="submissions",
    )

    def __str__(self) -> str:
        if self.respondent_name:
            return f"{self.respondent_name} ({self.created_at:%Y-%m-%d})"
        return f"Survey {self.id}"


class SurveyEditLog(models.Model):
    submission = models.ForeignKey(
        SurveySubmission, on_delete=models.CASCADE, related_name="edit_logs"
    )
    field_key = models.CharField(max_length=200)
    field_label = models.CharField(max_length=200, blank=True)
    old_value = models.JSONField(null=True, blank=True)
    new_value = models.JSONField(null=True, blank=True)
    payload_before = models.JSONField(default=dict)
    edited_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ["-edited_at"]

    def __str__(self) -> str:
        label = self.field_label or self.field_key
        return f"Edit '{label}' on submission {self.submission_id} at {self.edited_at:%Y-%m-%d %H:%M}"
