# admin.py
from django.contrib import admin
from django.db import models
from django.utils.html import format_html
from django.urls import reverse
from django.http import HttpResponseRedirect
from .models import Package

@admin.register(Package)
class PackageAdmin(admin.ModelAdmin):
    # List display fields
    list_display = [
        'name', 
        'price_display', 
        'duration_display',
        'features_short',
        'is_active_status',
        'package_actions'
    ]
    
    # List filter
    list_filter = [
        'is_active',
        'duration',
    ]
    
    # Search fields
    search_fields = [
        'name', 
        'features',
        'duration'
    ]
    
    # Default ordering
    ordering = ['price', 'name']
    
    # Fields to display in form
    fieldsets = (
        ('Basic Information', {
            'fields': (
                'name',
                'price',
                'is_active',
            ),
            'classes': ('wide',),
        }),
        ('Package Details', {
            'fields': (
                'duration',
                'features',
            ),
            'classes': ('wide',),
            'description': 'Enter package duration and features',
        }),
    )
    
    # Readonly fields - শুধু id ফিল্ড রাখুন কারণ created_at/updated_at নেই
    readonly_fields = ['id']
    
    # List per page
    list_per_page = 25
    
    # Actions
    actions = ['activate_packages', 'deactivate_packages', 'clone_package']
    
    # Custom methods for list display
    def price_display(self, obj):
        """Format price with currency"""
        return format_html(
            '<span style="color: #059669; font-weight: bold;">${}</span>',
            obj.price
        )
    price_display.short_description = 'Price'
    price_display.admin_order_field = 'price'
    
    def duration_display(self, obj):
        """Display duration with icon"""
        if obj.duration:
            return format_html(
                '<span style="display: flex; align-items: center; gap: 4px;">'
                '<span style="color: #6B7280;">📅</span> {}</span>',
                obj.duration
            )
        return format_html('<span style="color: #9CA3AF;">—</span>')
    duration_display.short_description = 'Duration'
    
    def features_short(self, obj):
        """Show first 50 characters of features"""
        if obj.features:
            features = obj.features[:50] + '...' if len(obj.features) > 50 else obj.features
            return format_html(
                '<span title="{}" style="cursor: help;">{}</span>',
                obj.features,
                features
            )
        return format_html('<span style="color: #9CA3AF;">—</span>')
    features_short.short_description = 'Features'
    
    def is_active_status(self, obj):
        """Show active status with colored badge"""
        if obj.is_active:
            return format_html(
                '<span style="background-color: #10B981; color: white; padding: 4px 8px; '
                'border-radius: 12px; font-size: 11px; font-weight: 500;">'
                '✓ Active</span>'
            )
        return format_html(
            '<span style="background-color: #EF4444; color: white; padding: 4px 8px; '
            'border-radius: 12px; font-size: 11px; font-weight: 500;">'
            '✗ Inactive</span>'
        )
    is_active_status.short_description = 'Status'
    is_active_status.admin_order_field = 'is_active'
    
    def package_actions(self, obj):
        """Custom action buttons"""
        return format_html(
            '<div style="display: flex; gap: 4px;">'
            '<a class="button" href="{}" style="background-color: #3B82F6; color: white; '
            'padding: 4px 8px; border-radius: 6px; text-decoration: none; font-size: 11px;">'
            '👁️ View</a>'
            '<a class="button" href="{}" style="background-color: #10B981; color: white; '
            'padding: 4px 8px; border-radius: 6px; text-decoration: none; font-size: 11px;">'
            '✏️ Edit</a>'
            '</div>',
            reverse('admin:package_package_change', args=[obj.pk]),
            reverse('admin:package_package_change', args=[obj.pk])
        )
    package_actions.short_description = 'Actions'
    
    # Custom actions
    def activate_packages(self, request, queryset):
        """Activate selected packages"""
        updated = queryset.update(is_active=True)
        self.message_user(
            request, 
            f'{updated} package{"s" if updated > 1 else ""} activated successfully.'
        )
    activate_packages.short_description = "Activate selected packages"
    
    def deactivate_packages(self, request, queryset):
        """Deactivate selected packages"""
        updated = queryset.update(is_active=False)
        self.message_user(
            request, 
            f'{updated} package{"s" if updated > 1 else ""} deactivated successfully.'
        )
    deactivate_packages.short_description = "Deactivate selected packages"
    
    def clone_package(self, request, queryset):
        """Clone selected packages"""
        if queryset.count() == 1:
            package = queryset.first()
            # Create new package with same data
            new_package = Package.objects.create(
                name=f"{package.name} (Copy)",
                price=package.price,
                features=package.features,
                duration=package.duration,
                is_active=False  # নতুন প্যাকেজ ইনঅ্যাকটিভ রাখি
            )
            self.message_user(
                request, 
                f'Package "{package.name}" cloned successfully as "{new_package.name}".'
            )
        else:
            self.message_user(
                request, 
                'Please select only one package to clone.',
                level='ERROR'
            )
    clone_package.short_description = "Clone selected package"
    
    # Override save model
    def save_model(self, request, obj, form, change):
        if not change:  # নতুন প্যাকেজ তৈরি হলে
            # কোন অতিরিক্ত লজিক যোগ করতে পারেন
            pass
        super().save_model(request, obj, form, change)
    
    class Meta:
        verbose_name = "Package"
        verbose_name_plural = "Packages"


# Inline admin (if needed for related models)
class PackageInline(admin.TabularInline):
    model = Package
    extra = 1
    fields = ['name', 'price', 'is_active']
    show_change_link = True