from __future__ import annotations

from django.contrib import admin

try:
    from unfold.admin import ModelAdmin as UnfoldModelAdmin
except ImportError:
    UnfoldModelAdmin = admin.ModelAdmin  # type: ignore[assignment]

from simorgh.apps.storage.models import FileMetadata, FileVariant, StorageFolder, UploadSession


@admin.register(FileMetadata)
class FileMetadataAdmin(UnfoldModelAdmin):
    list_display = ("filename", "size_bytes", "content_type", "tenant", "uploaded_by", "created_at")
    list_filter = ("storage_backend", "tenant")
    search_fields = ("filename", "checksum_sha256", "path")
    readonly_fields = ("public_id", "checksum_sha256", "size_bytes", "created_at", "updated_at")


@admin.register(FileVariant)
class FileVariantAdmin(UnfoldModelAdmin):
    list_display = ("source", "kind", "status", "size_bytes", "content_type", "created_at")
    list_filter = ("kind", "status")
    search_fields = ("source__filename", "kind")
    readonly_fields = ("public_id", "size_bytes", "created_at", "updated_at")
    ordering = ("-created_at",)


@admin.register(UploadSession)
class UploadSessionAdmin(UnfoldModelAdmin):
    list_display = ("filename", "tenant", "status", "received_chunks", "total_chunks", "created_at")
    list_filter = ("status", "tenant")
    search_fields = ("filename", "tenant__name")
    readonly_fields = ("public_id", "created_at", "updated_at")
    ordering = ("-created_at",)


@admin.register(StorageFolder)
class StorageFolderAdmin(UnfoldModelAdmin):
    list_display = ("name", "tenant", "parent", "created_at")
    list_filter = ("tenant",)
    search_fields = ("name", "tenant__name")
    readonly_fields = ("public_id", "created_at", "updated_at")
    ordering = ("tenant", "name")
