from django.db import models

from codesofy.master_details import ProductType, ResultMode
from usermanagement.models import UserProfile

    
class Language(models.Model):
    code = models.CharField(max_length=50, unique=True)
    name = models.CharField(max_length=200)
    created_user = models.CharField(max_length=150, null=True, blank=True)
    updated_user = models.CharField(max_length=150, null=True, blank=True)
    created_by = models.ForeignKey(
        UserProfile, null=True, blank=True, on_delete=models.CASCADE,
        related_name="languages_created_by"
    )
    updated_by = models.ForeignKey(
        UserProfile, null=True, blank=True, on_delete=models.CASCADE,
        related_name="languages_updated_by"
    )
    created_At = models.DateTimeField(auto_now_add=True)
    updated_At = models.DateTimeField(auto_now=True)
    language_id = models.CharField(max_length=150, null=True, blank=True, unique=True)
    eng_name = models.CharField(max_length=150, null=True, blank=True, unique=True)
    
    def __str__(self):
        return f"{self.code} - {self.name}"
    
    



class DeviceMoistureThreshold(models.Model):
    customer_device = models.OneToOneField(
        'mydevicemanagement.CustomerDevice',   
        on_delete=models.CASCADE,
        related_name='moisture_threshold'
    )
    threshold_value = models.FloatField(null=True)
    last_setdatetime = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.threshold_value
    
class AppSettings(models.Model):
    # Each customer has one settings record
    customer_user = models.OneToOneField(
        'customermanagement.Customer',
        on_delete=models.CASCADE,
        related_name='app_settings'
    )
    default_buyer = models.JSONField(
        default=dict,
        blank=True,
        null=True,
        help_text="Stores info about the customer's default buyer (e.g., id, name)"
    )
    default_field = models.JSONField(
        default=dict,
        blank=True,
        null=True,
        help_text="{'id': <field_id>, 'name': <field_name>}"
    )

    # Flexible default device info (JSON)
    default_device = models.JSONField(
        default=dict,
        blank=True,
        null=True,
        help_text="Stores key/value info for the customer's default device"
    )
    language = models.ForeignKey(
        Language,
        on_delete=models.PROTECT,   # prevent deleting language if in use
        null=True,
        blank=True,
        related_name="app_settings",
    )

    # Optional config/app version
    version = models.CharField(max_length=50, null=True, blank=True)
    test_mode = models.CharField(max_length=50, blank=True, choices=ResultMode.choices())
    # Meta
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f"AppSettings for {self.customer_user}"
    
    
      
class ApiMessage(models.Model):
    message_key = models.CharField(max_length=100)
    language = models.ForeignKey(Language, on_delete=models.CASCADE)
    message = models.TextField()
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        unique_together = ("message_key", "language")
        indexes = [
            models.Index(fields=["message_key", "language"]),
        ]

    def __str__(self):
        return f"{self.message_key} ({self.language.code})"     