from django.contrib import admin
from django.contrib.auth import get_user_model
from rest_framework.authtoken.models import Token
from .models import *

user=get_user_model()

admin.site.register(user)
admin.site.register(UserProfile)
admin.site.register(Organization)
admin.site.register(Agent)
admin.site.register(Invitation)
admin.site.register(Message)

from django.contrib.contenttypes.models import ContentType
admin.site.register(ContentType)
admin.site.register(Wallet)
admin.site.register(WalletTransaction)

@admin.register(SubscriptionPackage)
class SubscriptionPackageAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'price')
    search_fields = ('name',)
    ordering = ('id',)
    list_editable = ('price',)  # Allow inline editing in the list view


@admin.register(Subscription)
class SubscriptionAdmin(admin.ModelAdmin):
    list_display = ('id', 'user', 'package', 'subscription_date', 'duration_days', 'expiry_date', 'is_active_status')
    search_fields = ('user__email', 'package__name')
    list_filter = ('package', 'subscription_date', 'expiry_date')
    readonly_fields = ('subscription_date', 'expiry_date')

    def is_active_status(self, obj):
        return obj.is_active()
    is_active_status.boolean = True
    is_active_status.short_description = "Active?"

@admin.register(StripeRecharge)
class StripeRechargeAdmin(admin.ModelAdmin):
    list_display = ('user', 'amount', 'session_id', 'success', 'created_at')
    search_fields = ('user__email', 'session_id')
    list_filter = ('success', 'created_at')

@admin.register(PayPalRecharge)
class PayPalRechargeAdmin(admin.ModelAdmin):
    list_display = ('user', 'amount', 'payment_id', 'success', 'created_at')
    search_fields = ('user__email', 'payment_id')
    list_filter = ('success', 'created_at')


@admin.register(Coupon)
class CouponAdmin(admin.ModelAdmin):
    list_display = ["code", "discount_type", "discount_value", "expires_at", "max_uses"]

admin.site.register(CouponUsage)

from django.contrib import admin
from django.utils.html import format_html
from django.utils import timezone
from datetime import timedelta
from .models import UserVerification, IdentityDocumentType, VerificationDiscount, VerificationFee

class UserVerificationAdmin(admin.ModelAdmin):
    list_display = (
        'user', 'document_type', 'document_image_preview', 'selfie_image_preview',
        'status', 'applied_at', 'expiry_date', 'verification_fee', 'paid'
    )
    list_filter = ('status', 'document_type', 'paid')
    search_fields = ('user__email', 'document_number')
    readonly_fields = ('document_image_preview', 'selfie_image_preview')
    actions = ['accept_verification', 'reject_verification']

    def document_image_preview(self, obj):
        if obj.document_image:
            return format_html('<img src="{}" width="80" />', obj.document_image.url)
        return "-"
    document_image_preview.short_description = "Document Image"

    def selfie_image_preview(self, obj):
        if obj.selfie_image:
            return format_html('<img src="{}" width="80" />', obj.selfie_image.url)
        return "-"
    selfie_image_preview.short_description = "Selfie Image"

    @admin.action(description="Accept selected verifications")
    def accept_verification(self, request, queryset):
        now = timezone.now()
        updated = 0
        for verification in queryset.filter(status='pending'):
            verification.status = 'approved'
            verification.verified_at = now
            # Set expiry date to 30 days from now (can customize per system)
            verification.expiry_date = now + timedelta(days=30)
            verification.save()
            updated += 1
        self.message_user(request, f"{updated} verifications approved.")

    @admin.action(description="Reject selected verifications")
    def reject_verification(self, request, queryset):
        updated = 0
        for verification in queryset.filter(status='pending'):
            verification.status = 'rejected'
            verification.verified_at = None
            # Optionally: prompt for reason via a custom admin form (advanced)
            verification.rejected_reason = "Rejected by admin."
            verification.save()
            updated += 1
        self.message_user(request, f"{updated} verifications rejected.")


@admin.register(IdentityDocumentType)
class IdentityDocumentTypeAdmin(admin.ModelAdmin):
    list_display = ['name', 'description', 'requires_photo']

@admin.register(VerificationDiscount)
class VerificationDiscountAdmin(admin.ModelAdmin):
    list_display = ['package', 'discount_type', 'discount_value']

from django.contrib import admin
from django.utils import timezone
from datetime import timedelta
from .models import UserVerification

@admin.register(UserVerification)
class UserVerificationAdmin(admin.ModelAdmin):
    list_display = (
        "user", "document_type", "status", "applied_at", "verified_at", "expiry_date", "paid"
    )
    list_filter = ("status", "document_type", "paid")
    search_fields = ("user__email", "document_number")
    readonly_fields = ("applied_at",)

    def save_model(self, request, obj, form, change):
        # change=True means editing, not creating
        if change:
            old_obj = UserVerification.objects.get(pk=obj.pk)
            # If status is being set to approved and it was not approved before
            if obj.status == "approved" and old_obj.status != "approved":
                now = timezone.now()
                if not obj.verified_at:
                    obj.verified_at = now
                if not obj.expiry_date:
                    obj.expiry_date = now + timedelta(days=30)  # 30 days, or whatever logic you want
        super().save_model(request, obj, form, change)

@admin.register(VerificationFee)
class VerificationFeeAdmin(admin.ModelAdmin):
    list_display = ['price', 'created_at']