from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.utils.html import format_html
from .models import User, CustomerProfile


@admin.register(User)
class CustomUserAdmin(UserAdmin):
    list_display = ('email', 'first_name', 'last_name', 'is_staff', 'is_active', 'account_status', 'date_joined')
    list_filter = ('is_staff', 'is_superuser', 'is_active', 'date_joined')
    search_fields = ('email', 'first_name', 'last_name')
    ordering = ('-date_joined',)
    list_editable = ('is_active',)
    
    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('Personal Info', {'fields': ('first_name', 'last_name', 'username')}),
        ('Permissions', {
            'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions'),
        }),
        ('Important Dates', {'fields': ('last_login', 'date_joined')}),
    )
    
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'first_name', 'last_name', 'password1', 'password2', 'is_active', 'is_staff'),
        }),
    )
    
    actions = ['activate_users', 'deactivate_users']
    
    def account_status(self, obj):
        if obj.is_active:
            return format_html(
                '<span style="color: #10b981; font-weight: bold;">● Active</span>'
            )
        return format_html(
            '<span style="color: #ef4444; font-weight: bold;">● Inactive</span>'
        )
    account_status.short_description = 'Status'
    
    @admin.action(description='Activate selected users')
    def activate_users(self, request, queryset):
        count = queryset.update(is_active=True)
        self.message_user(request, f'{count} user(s) have been activated.')
    
    @admin.action(description='Deactivate selected users')
    def deactivate_users(self, request, queryset):
        queryset = queryset.exclude(is_superuser=True)
        count = 0
        for user in queryset:
            if user.is_active:
                user.is_active = False
                user.save()
                count += 1
        self.message_user(request, f'{count} user(s) have been deactivated and logged out.')


@admin.register(CustomerProfile)
class CustomerProfileAdmin(admin.ModelAdmin):
    list_display = ('user', 'user_status', 'customer_type', 'company_name', 'phone_number', 'city', 'country', 'created_at')
    list_filter = ('customer_type', 'user__is_active', 'country', 'created_at')
    search_fields = ('user__email', 'user__first_name', 'company_name', 'phone_number')
    readonly_fields = ('created_at', 'updated_at')
    
    fieldsets = (
        ('User', {
            'fields': ('user', 'customer_type')
        }),
        ('Personal Information', {
            'fields': ('job_title', 'phone_number')
        }),
        ('Business Information', {
            'fields': ('company_name', 'company_legal_name', 'company_email', 'vat_tax_number'),
            'classes': ('collapse',)
        }),
        ('Address', {
            'fields': ('street_address', 'city', 'country', 'state_province', 'zip_code')
        }),
        ('Documents', {
            'fields': ('business_permit', 'commercial_trading_license', 'vat_registration_certificate', 'owner_passport_copy', 'national_id'),
            'classes': ('collapse',)
        }),
        ('Timestamps', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )
    
    def user_status(self, obj):
        if obj.user.is_active:
            return format_html(
                '<span style="color: #10b981; font-weight: bold;">● Active</span>'
            )
        return format_html(
            '<span style="color: #ef4444; font-weight: bold;">● Inactive</span>'
        )
    user_status.short_description = 'Account Status'
    