from django.contrib import admin
from .models import AIConfiguration, AIChatSession, AIChatMessage, CommunicationTemplate

@admin.register(CommunicationTemplate)
class CommunicationTemplateAdmin(admin.ModelAdmin):
    list_display = ('name', 'type', 'category', 'is_active', 'updated_at')
    list_filter = ('type', 'category', 'is_active')
    search_fields = ('name', 'subject', 'content')
    ordering = ('name',)

class AIChatMessageInline(admin.TabularInline):
    model = AIChatMessage
    extra = 0
    readonly_fields = ('created_at',)

@admin.register(AIChatSession)
class AIChatSessionAdmin(admin.ModelAdmin):
    list_display = ('session_id', 'user', 'created_at', 'updated_at')
    list_filter = ('created_at', 'updated_at')
    search_fields = ('session_id', 'user__email')
    inlines = [AIChatMessageInline]
    readonly_fields = ('created_at', 'updated_at')

@admin.register(AIConfiguration)
class AIConfigurationAdmin(admin.ModelAdmin):
    fieldsets = (
        ('AI & Automation Control', {
            'fields': ('enable_auto_chat', 'ai_persona', 'ai_model_name', 'openai_api_key'),
            'description': 'Configure the central AI brain for the site.'
        }),
        ('Basic Information', {
            'fields': ('site_name', 'site_tagline', 'site_description')
        }),
        ('Hero Section', {
            'fields': ('hero_title', 'hero_subtitle', 'hero_background_image', 'hero_button_text', 'hero_button_link')
        }),
        ('Pricing & Tax', {
            'fields': ('tax_rate_percent', 'free_shipping_threshold', 'shipping_flat_amount')
        }),
        ('Branding', {
            'fields': ('theme_color', 'logo', 'logo_dark', 'favicon')
        }),
        ('Contact Information', {
            'fields': (
                'contact_email', 'support_email', 'sales_email',
                'phone', 'whatsapp'
            )
        }),
        ('Address', {
            'fields': (
                'address_line1', 'address_line2', 'city',
                'state', 'country', 'postal_code'
            )
        }),
        ('Social Media', {
            'fields': (
                'facebook_url', 'twitter_url', 'instagram_url',
                'linkedin_url', 'youtube_url', 'pinterest_url',
                'tiktok_url', 'telegram_url'
            )
        }),
        ('Business Hours', {
            'fields': ('business_hours',)
        }),
        ('SEO & Analytics', {
            'fields': (
                'meta_keywords', 'meta_description',
                'google_analytics_id', 'google_tag_manager_id',
                'facebook_pixel_id'
            )
        }),
        ('Email Settings', {
            'fields': (
                'email_from_address',
                'smtp_host', 'smtp_port', 'smtp_username',
                'smtp_password', 'smtp_use_tls',
                # 'admin_notification_email', 'order_notification_email'  # Removed as per request
            )
        }),
        ('SMS Settings (Twilio)', {
            'fields': (
                'twilio_account_sid', 'twilio_auth_token', 'twilio_phone_number'
            )
        }),
        ('Footer', {
            'fields': ('footer_about', 'copyright_text')
        }),
        ('Features', {
            'fields': (
                'enable_chat', 'enable_newsletter', 'enable_wishlist',
                'enable_reviews', 'enable_ai_recommendations', 'enable_ai_seo'
            )
        }),
        ('Bank API', {
            'fields': ('bank_api_base_url', 'bank_api_token')
        }),
        ('Maintenance', {
            'fields': ('maintenance_mode', 'maintenance_message', 'maintenance_end_time', 'maintenance_access_mode')
        }),
        ('Custom Code', {
            'fields': ('custom_css', 'custom_js', 'header_scripts', 'footer_scripts'),
            'classes': ('collapse',)
        }),
    )
    
    readonly_fields = ('updated_at',)
    
    def has_add_permission(self, request):
        # Only allow one instance
        return not AIConfiguration.objects.exists()
    
    def has_delete_permission(self, request, obj=None):
        # Prevent deletion
        return False
