from django.db import models
from django.contrib.auth import get_user_model
from decimal import Decimal
from django.utils import timezone

User = get_user_model()
import json

class SystemSettings(models.Model):
    SETTING_TYPES = [
        ('mpesa', 'M-Pesa API'),
        ('email', 'Email Configuration'),
        ('sms', 'SMS API'),
        ('textsms', 'TextSMS API'),
        ('maps', 'Google Maps API'),
        ('mikrotik', 'MikroTik Configuration'),
        ('general', 'General Settings'),
    ]

    category = models.CharField(max_length=20, choices=SETTING_TYPES)
    key = models.CharField(max_length=100, help_text="Setting key/name")
    value = models.TextField(help_text="Setting value (will be encrypted for sensitive data)")
    description = models.TextField(blank=True, help_text="Description of what this setting does")
    is_sensitive = models.BooleanField(default=False, help_text="Mark as sensitive to hide value in UI")
    is_required = models.BooleanField(default=False, help_text="Required for system operation")
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        unique_together = ['category', 'key']
        ordering = ['category', 'key']

    def __str__(self):
        return f"{self.get_category_display()} - {self.key}"

    @staticmethod
    def get_mpesa_settings():
        """Get all M-Pesa settings"""
        mpesa_settings = SystemSettings.objects.filter(category='mpesa')
        return {setting.key: setting.value for setting in mpesa_settings}

    @staticmethod
    def get_sms_settings():
        """Get all SMS settings"""
        sms_settings = SystemSettings.objects.filter(category='sms')
        return {setting.key: setting.value for setting in sms_settings}

class CompanyProfile(models.Model):
    company_name = models.CharField(max_length=200, default="OptiNet Solutions")
    company_logo = models.ImageField(upload_to='company/', blank=True, null=True)
    favicon = models.ImageField(upload_to='company/favicon/', blank=True, null=True, help_text="Upload a favicon (.ico, .png) file")
    address = models.TextField(blank=True)
    phone = models.CharField(max_length=20, blank=True)
    email = models.EmailField(blank=True)
    website = models.URLField(blank=True)

    # Business Details
    tax_id = models.CharField(max_length=50, blank=True, help_text="KRA PIN or Tax ID")
    business_registration = models.CharField(max_length=100, blank=True)

    # Default Settings
    default_currency = models.CharField(max_length=3, default='KES')
    timezone = models.CharField(max_length=50, default='Africa/Nairobi')

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f"{self.company_name}"

    class Meta:
        verbose_name = "Company Profile"
        verbose_name_plural = "Company Profile"


