from django.db import models

from django.contrib.auth import get_user_model

User = get_user_model()

class City(models.Model):
	name = models.CharField(max_length=500, unique=True)

	class Meta:
		ordering = ('name',)
		verbose_name = "City"
		verbose_name_plural = "Cities"

	def __str__(self):
		return self.name

class Product(models.Model):
	name = models.CharField(max_length=255, unique=True)	
	code = models.CharField(max_length=255, unique=True)
	description = models.TextField(blank=True, null=True)
	class Meta:
		ordering = ('name',)
	def __str__(self):
		return self.name

class Customer(models.Model):
	VAT_CHOICES = [
        ("1", "Có"),
        ("0", "Không"),
		("2", "Cả 2"),
	]
	POTENTIAL_CHOICES = [
	    ("", "Không xác định"),
	    ("Low", "Thấp"),
	    ("Medium", "Trung bình"),
	    ("High", "Cao"),
	]

	name = models.CharField(max_length=255)
	tax_code = models.CharField(max_length=255, unique=True)
	vat_status = models.CharField(max_length=5, choices=VAT_CHOICES, default="1")  # Lấy VAT (Có/Không)
	register_date = models.DateField(null=True, blank=True)  # Ngày đăng ký
	note = models.TextField(blank=True, null=True)  # NOTE
	feedback = models.TextField(blank=True, null=True)  # Phản hồi từ khách hàng

	city = models.ForeignKey(City, on_delete=models.SET_NULL, null=True, blank=True)
	address = models.TextField(blank=True, null=True)
	pic = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name="managed_customers")
	potential = models.CharField(max_length=255, choices=POTENTIAL_CHOICES, blank=True)
	products = models.ManyToManyField(Product, blank=True)
	# Chỉ hiển thị thông tin này nếu user có quyền xem
	
	contact_person = models.CharField(max_length=255, blank=True, null=True)
	phone_number = models.CharField(max_length=255, blank=True, null=True)

	def can_assign(self, user):
		"""Chỉ người dùng có thể assign khách hàng này nếu tiềm năng là 'Low' hoặc rỗng."""
		return self.potential in ["", "Low"]

	def can_view_sensitive_info(self, user):
		"""Kiểm tra quyền truy cập vào thông tin quan trọng."""
		return user.is_superuser or self.pic == user

	class Meta:
		ordering = ('name',)
	def __str__(self):
		return self.name
