from django.contrib import admin
from django.contrib.auth import get_user_model
from .models import UserRole, ShipperProfile, TransporterProfile, KYCDocument, PlatformSettings, UserPushDevice, PasswordResetOTP

User = get_user_model()


class UserRoleInline(admin.StackedInline):
    model = UserRole
    can_delete = False
    fk_name = 'user'
    verbose_name_plural = 'Role'


@admin.register(UserRole)
class UserRoleAdmin(admin.ModelAdmin):
    list_display = ('user', 'role', 'phone', 'language')
    list_filter = ('role',)


@admin.register(ShipperProfile)
class ShipperProfileAdmin(admin.ModelAdmin):
    list_display = (
        'user', 'account_type', 'company_name', 'business_name', 'tax_id',
        'national_id_number', 'kyc_verified', 'credit_approved', 'kyc_submitted_at',
    )
    list_filter = ('account_type', 'kyc_verified', 'credit_approved')
    search_fields = (
        'user__email', 'company_name', 'business_name', 'tax_id',
        'national_id_number', 'passport_number',
    )
    actions = ['mark_kyc_verified']

    @admin.action(description='Mark KYC verified')
    def mark_kyc_verified(self, request, queryset):
        from django.utils import timezone
        updated = queryset.update(kyc_verified=True)
        self.message_user(request, f'{updated} profile(s) marked as KYC verified.')


@admin.register(TransporterProfile)
class TransporterProfileAdmin(admin.ModelAdmin):
    list_display = (
        'user', 'account_type', 'company_name',
        'office_number', 'mobile_number',
        'local', 'country_to_country', 'documents_verified',
    )
    list_filter = ('account_type', 'documents_verified', 'local', 'country_to_country')
    search_fields = ('user__email', 'company_name', 'office_number', 'mobile_number', 'company_location')
    actions = ['mark_documents_verified']

    @admin.action(description='Mark documents verified')
    def mark_documents_verified(self, request, queryset):
        updated = queryset.update(documents_verified=True)
        self.message_user(request, f'{updated} profile(s) marked as documents verified.')


@admin.register(PlatformSettings)
class PlatformSettingsAdmin(admin.ModelAdmin):
    list_display = (
        'default_wallet_currency',
        'load_visibility_radius_km',
        'load_visibility_max_radius_km',
        'admin_stale_trip_hours',
    )

    def has_add_permission(self, request):
        return not PlatformSettings.objects.exists()

    def has_delete_permission(self, request, obj=None):
        return False


@admin.register(UserPushDevice)
class UserPushDeviceAdmin(admin.ModelAdmin):
    list_display = ('user', 'fcm_token_updated_at')
    search_fields = ('user__email', 'user__username')
    raw_id_fields = ('user',)


@admin.register(KYCDocument)
class KYCDocumentAdmin(admin.ModelAdmin):
    list_display = (
        'id', 'user', 'document_type', 'gcc_country', 'passport_number',
        'verified', 'expiry_date', 'submitted_at', 'reviewed_at',
    )
    list_filter = ('document_type', 'verified', 'gcc_country')
    search_fields = ('user__email', 'passport_number')
    actions = ['mark_verified']

    @admin.action(description='Mark document verified')
    def mark_verified(self, request, queryset):
        from django.utils import timezone
        updated = queryset.update(verified=True, reviewed_at=timezone.now())
        self.message_user(request, f'{updated} document(s) marked verified.')


@admin.register(PasswordResetOTP)
class PasswordResetOTPAdmin(admin.ModelAdmin):
    list_display = ('id', 'user', 'email', 'otp', 'is_used', 'attempts', 'expires_at', 'created_at')
    list_filter = ('is_used',)
    search_fields = ('email', 'user__email', 'otp')
    readonly_fields = ('created_at',)

