from django.db import models
from uuid import uuid4


class Dispute(models.Model):
	class Status(models.TextChoices):
		OPEN = "open", "Open"
		UNDER_REVIEW = "under_review", "Under Review"
		RESOLVED = "resolved", "Resolved"
		CLOSED = "closed", "Closed"

	class ResolutionType(models.TextChoices):
		FULL_BUYER = "full_buyer", "Full Buyer"
		FULL_SELLER = "full_seller", "Full Seller"
		SPLIT = "split", "Split"
		CANCELLED = "cancelled", "Cancelled"

	id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
	deal = models.ForeignKey("escrow.Deal", on_delete=models.CASCADE, related_name="disputes")
	raised_by = models.ForeignKey("core.User", on_delete=models.CASCADE, related_name="raised_disputes")
	assigned_to = models.ForeignKey(
		"core.User",
		on_delete=models.SET_NULL,
		related_name="assigned_disputes",
		null=True,
		blank=True,
	)
	reason_category = models.CharField(max_length=100)
	reason_detail = models.TextField()
	status = models.CharField(max_length=20, choices=Status.choices, default=Status.OPEN)
	tier = models.PositiveSmallIntegerField(default=1)
	ai_recommendation = models.TextField(null=True, blank=True)
	resolution = models.TextField(null=True, blank=True)
	resolution_type = models.CharField(max_length=20, choices=ResolutionType.choices, null=True, blank=True)
	resolved_at = models.DateTimeField(null=True, blank=True)

	class Meta:
		db_table = "disputes"

	def __str__(self):
		return f"{self.deal.code} - {self.status}"


class DisputeMessage(models.Model):
	id = models.UUIDField(primary_key=True, default=uuid4, editable=False)
	dispute = models.ForeignKey("disputes.Dispute", on_delete=models.CASCADE, related_name="messages")
	sender = models.ForeignKey("core.User", on_delete=models.CASCADE, related_name="dispute_messages")
	message = models.TextField()
	created_at = models.DateTimeField(auto_now_add=True)

	class Meta:
		db_table = "dispute_messages"
		ordering = ["created_at"]

	def __str__(self):
		return f"{self.dispute_id} - {self.sender_id}"
