from django.contrib import admin
from .models import (
    ChatMessage,
    MediaBookmark,
    MediaComment,
    MediaReaction,
    PaymentGateway,
    SubscriptionPlan,
    InvestmentPlan,
    Investment,
    UserSubscription,
    UserWallet,
    WalletTransaction,
    WithdrawalRequest,
    ReferralBonus,
    PaymentTransaction,
    Notification,
    ConnectionRequest,
    MessageThread,
    Message,
    PaidContent,
    ContentPurchase,
    CreatorMedia,
    ProfileFollow,
    MediaLike,
    BookingRequest,
    UserReport,
)


@admin.register(SubscriptionPlan)
class SubscriptionPlanAdmin(admin.ModelAdmin):
    list_display = ("name", "price_cents", "currency", "duration_days", "is_active")
    list_filter = ("currency", "is_active")
    search_fields = ("name",)


@admin.register(UserSubscription)
class UserSubscriptionAdmin(admin.ModelAdmin):
    list_display = ("user", "plan", "is_active", "auto_renew", "started_at", "expires_at")
    list_filter = ("is_active", "auto_renew", "plan")
    search_fields = ("user__username", "plan__name", "provider_subscription_id")


@admin.register(InvestmentPlan)
class InvestmentPlanAdmin(admin.ModelAdmin):
    list_display = ("name", "amount", "currency", "duration_days", "profit_percent", "is_active")
    list_filter = ("currency", "duration_days", "is_active")
    search_fields = ("name",)


@admin.register(Investment)
class InvestmentAdmin(admin.ModelAdmin):
    list_display = ("user", "plan", "amount", "profit", "payout", "status", "started_at", "ends_at", "is_withdrawn")
    list_filter = ("status", "plan", "is_withdrawn")
    search_fields = ("user__username", "plan__name")


@admin.register(UserWallet)
class UserWalletAdmin(admin.ModelAdmin):
    list_display = ("user", "balance", "is_locked", "updated_at")
    search_fields = ("user__username",)


@admin.register(WalletTransaction)
class WalletTransactionAdmin(admin.ModelAdmin):
    list_display = ("user", "transaction_type", "provider", "amount", "currency", "status", "created_at")
    list_filter = ("transaction_type", "provider", "status", "currency")
    search_fields = ("user__username", "reference")


@admin.register(WithdrawalRequest)
class WithdrawalRequestAdmin(admin.ModelAdmin):
    list_display = ("user", "amount", "currency", "provider", "status", "created_at", "processed_at")
    list_filter = ("status", "provider", "currency")
    search_fields = ("user__username", "reference")


@admin.register(ReferralBonus)
class ReferralBonusAdmin(admin.ModelAdmin):
    list_display = ("user", "referred_user", "bonus_cents", "investment", "created_at")
    search_fields = ("user__username", "referred_user__username")


@admin.register(PaymentTransaction)
class PaymentTransactionAdmin(admin.ModelAdmin):
    list_display = ("user", "plan", "provider", "status", "amount", "currency", "created_at")
    list_filter = ("provider", "status", "currency")
    search_fields = ("user__username", "plan__name", "provider_payment_id", "reference")
    readonly_fields = ("created_at", "updated_at")


@admin.register(Notification)
class NotificationAdmin(admin.ModelAdmin):
    list_display = ("user", "verb", "unread", "created_at")
    list_filter = ("unread",)
    search_fields = ("user__username", "verb", "data")


@admin.register(ConnectionRequest)
class ConnectionRequestAdmin(admin.ModelAdmin):
    list_display = ("from_user", "to_user", "status", "created_at", "responded_at")
    list_filter = ("status",)
    search_fields = ("from_user__username", "to_user__username")


@admin.register(MessageThread)
class MessageThreadAdmin(admin.ModelAdmin):
    list_display = ("title", "is_private", "last_message_at", "updated_at")
    search_fields = ("title",)


@admin.register(Message)
class MessageAdmin(admin.ModelAdmin):
    list_display = ("thread", "sender", "status", "created_at", "read_at")
    list_filter = ("status", "is_system")
    search_fields = ("sender__username", "thread__title")


@admin.register(PaidContent)
class PaidContentAdmin(admin.ModelAdmin):
    list_display = ("title", "author", "price_cents", "currency", "is_published", "created_at")
    list_filter = ("is_published", "currency")
    search_fields = ("title", "author__username")


@admin.register(ContentPurchase)
class ContentPurchaseAdmin(admin.ModelAdmin):
    list_display = ("buyer", "content", "price_cents", "currency", "purchased_at")
    search_fields = ("buyer__username", "content__title")


@admin.register(CreatorMedia)
class CreatorMediaAdmin(admin.ModelAdmin):
    list_display = ("title", "creator", "category", "media_type", "is_active", "updated_at")
    list_filter = ("category", "media_type", "is_active")
    search_fields = ("title", "creator__user__username", "description")


@admin.register(ProfileFollow)
class ProfileFollowAdmin(admin.ModelAdmin):
    list_display = ("follower", "profile", "created_at")
    search_fields = ("follower__username", "profile__user__username")


@admin.register(MediaLike)
class MediaLikeAdmin(admin.ModelAdmin):
    list_display = ("user", "media_item", "created_at")
    search_fields = ("user__username", "media_item__title")


@admin.register(BookingRequest)
class BookingRequestAdmin(admin.ModelAdmin):
    list_display = ("requester", "profile", "preferred_date", "status", "created_at")
    list_filter = ("status",)
    search_fields = ("requester__username", "profile__user__username", "message")


@admin.register(UserReport)
class UserReportAdmin(admin.ModelAdmin):
    list_display = ("reporter", "reported_user", "reason", "status", "created_at")
    list_filter = ("status",)
    search_fields = ("reporter__username", "reported_user__username", "reason")


@admin.register(MediaComment)
class MediaCommentAdmin(admin.ModelAdmin):
    list_display = ('user', 'media_item', 'body',)
    list_filter = ("user",)
    search_fields = ('user',)

@admin.register(MediaReaction)
class MediaReactionAdmin(admin.ModelAdmin):
    list_display = ('user', 'media_item', 'type', 'created_at',)
    list_filter = ("user",)
    search_fields = ('user','type',)
( )
@admin.register(MediaBookmark)
class MediaBookmarkAdmin(admin.ModelAdmin):
    list_display = ('user', 'media_item', )
    list_filter = ("user",)
    search_fields = ('user',)

@admin.register(ChatMessage)
class ChatMessageAdmin(admin.ModelAdmin):
    list_display = ('user', 'message', 'is_from_support', )
    list_filter = ("user",)
    search_fields = ('user',)

@admin.register(PaymentGateway)
class PaymentGatewayAdmin(admin.ModelAdmin):
    list_display = ("name", "provider", "status", "is_test_mode", "is_active", "display_order")
    list_filter = ("provider", "status", "is_test_mode", "is_active")
    search_fields = ("name", "provider")
    ordering = ("display_order",)
    
from django.contrib import admin
from .models import EntertainmentBrand, BrandPartnership


@admin.register(EntertainmentBrand)
class EntertainmentBrandAdmin(admin.ModelAdmin):
    list_display = (
        "name",
        "category",
        "status",
        "is_verified",
        "is_featured",
        "trust_score",
        "display_order",
        "created_at",
    )
    list_filter = (
        "status",
        "category",
        "is_verified",
        "is_featured",
        "is_active",
    )
    search_fields = ("name", "website", "contact_email", "description")
    prepopulated_fields = {"slug": ("name",)}
    readonly_fields = ("created_at", "updated_at", "verified_at")
    ordering = ("display_order", "name")

    fieldsets = (
        ("Basic Information", {
            "fields": (
                "name",
                "slug",
                "logo",
                "website",
                "description",
                "category",
            )
        }),
        ("Trust & Status", {
            "fields": (
                "status",
                "is_verified",
                "is_featured",
                "trust_score",
                "is_active",
                "display_order",
            )
        }),
        ("Contact", {
            "fields": (
                "contact_email",
                "contact_phone",
            )
        }),
        ("Social Links", {
            "fields": (
                "instagram",
                "twitter",
                "youtube",
                "linkedin",
            ),
            "classes": ("collapse",),
        }),
        ("Internal", {
            "fields": (
                "notes",
                "verified_at",
                "created_at",
                "updated_at",
            ),
            "classes": ("collapse",),
        }),
    )

    actions = ["mark_as_trusted", "mark_as_featured", "remove_featured"]

    @admin.action(description="Mark selected brands as Trusted & Verified")
    def mark_as_trusted(self, request, queryset):
        from django.utils import timezone
        updated = queryset.update(
            status=EntertainmentBrand.Status.TRUSTED,
            is_verified=True,
            verified_at=timezone.now()
        )
        self.message_user(request, f"{updated} brand(s) marked as Trusted.")

    @admin.action(description="Mark as Featured")
    def mark_as_featured(self, request, queryset):
        updated = queryset.update(is_featured=True)
        self.message_user(request, f"{updated} brand(s) marked as Featured.")

    @admin.action(description="Remove Featured")
    def remove_featured(self, request, queryset):
        updated = queryset.update(is_featured=False)
        self.message_user(request, f"{updated} brand(s) unfeatured.")


@admin.register(BrandPartnership)
class BrandPartnershipAdmin(admin.ModelAdmin):
    list_display = (
        "brand",
        "celebrity",
        "partnership_type",
        "is_active",
        "start_date",
        "end_date",
        "created_at",
    )
    list_filter = ("partnership_type", "is_active", "brand")
    search_fields = (
        "brand__name",
        "celebrity__user__username",
        "celebrity__display_name",
    )
    autocomplete_fields = ("brand", "celebrity")
    ordering = ("-created_at",)
    
    
    
    
