from django.contrib import admin
from .models import (
    Ads,
    AdsManual,
    DataManagement,
    SourceNetwork,
    SourceHtml,
    SourceManual,
    NetworkSourceVersion,
    NetworkSourceError,
    NetworkMonitoredPage,
    NetworkPageError,
    ManualParserLog,
    NetworkMonitoredObserve,
    RawMonitoredLink,
    NetworkStatus,
)

# --- Inline dla wersji źródła, błędów i HTML Config ---
class NetworkSourceVersionInline(admin.TabularInline):
    model = NetworkSourceVersion
    extra = 0
    readonly_fields = ('version', 'created_at', 'author', 'comment')

class HtmlNetworkSourceInline(admin.StackedInline):
    model = SourceHtml
    extra = 0

class ManualDataSourceInline(admin.StackedInline):
    model = SourceManual
    extra = 0

class NetworkSourceErrorInline(admin.TabularInline):
    model = NetworkSourceError
    extra = 0
    readonly_fields = ('created_at', 'error_message', 'error_type')


# --- NetworkSource Admin ---
@admin.register(SourceNetwork)
class NetworkSourceAdmin(admin.ModelAdmin):
    list_display = ("title", "name", "type", "base_url", "is_ai", "enabled", "created_at", "last_checked")
    search_fields = ("title", "name", "base_url", "structure")
    list_filter = ("is_ai", "enabled", "type")
    inlines = [HtmlNetworkSourceInline, ManualDataSourceInline, NetworkSourceVersionInline, NetworkSourceErrorInline]
    readonly_fields = ("created_at", "last_checked", "last_status")
    ordering = ("-created_at",)

# --- DataManagement Admin ---
@admin.register(DataManagement)
class DataManagementAdmin(admin.ModelAdmin):
    list_display = ("source", "isSendToMainServer", "listing_date", "isMerged", "DownloadManagment", "worker_number")
    list_filter = ("isSendToMainServer", "isMerged", "DownloadManagment")

# --- NetworkMonitoring Admin ---
@admin.register(Ads)
class NetworkMonitoringAdmin(admin.ModelAdmin):
    list_display = ("id", "__str__")

@admin.register(AdsManual)
class NetworkMonitoringManualAdmin(admin.ModelAdmin):
    list_display = ("id", "__str__")

# --- NetworkMonitoredPage Admin ---
@admin.register(NetworkMonitoredPage)
class NetworkMonitoredPageAdmin(admin.ModelAdmin):
    list_display = ("id", "source", "name", "url", "date_fetched", "is_fetched", "is_complete", "is_active")
    search_fields = ("name", "url")
    list_filter = ("is_fetched", "is_complete", "is_active", "estate_type", "offer_type", "source")
    readonly_fields = ("date_fetched", "created_at")
    ordering = ("-date_fetched",)

# --- Pozostałe modele ---
@admin.register(NetworkPageError)
class NetworkPageErrorAdmin(admin.ModelAdmin):
    list_display = ("id", "network_page", "error_type", "created_at")
    search_fields = ("error_message",)
    readonly_fields = ("created_at",)

@admin.register(ManualParserLog)
class ManualParserLogAdmin(admin.ModelAdmin):
    list_display = ("id", "source_name", "domain", "skip_type", "parsed_successfully", "saved_to_ads_manual", "created_at")
    list_filter = ("skip_type", "source_name", "parsed_successfully", "saved_to_ads_manual", "created_at")
    search_fields = ("url", "domain", "error_summary", "error_message", "source_name")
    readonly_fields = ("created_at",)
    date_hierarchy = "created_at"
    ordering = ("-created_at",)
    
    fieldsets = (
        ('Basic Info', {
            'fields': ('network_page', 'source', 'source_name', 'domain', 'url')
        }),
        ('Status', {
            'fields': ('skip_type', 'parsed_successfully', 'saved_to_ads_manual')
        }),
        ('Error Details', {
            'fields': ('error_summary', 'error_message', 'field_errors'),
            'classes': ('collapse',)
        }),
        ('Metadata', {
            'fields': ('created_at',)
        }),
    )

@admin.register(NetworkMonitoredObserve)
class NetworkMonitoredObserveAdmin(admin.ModelAdmin):
    list_display = ("id", "user", "page", "is_observe", "last_scraped", "created_at")
    list_filter = ("is_observe", "user")
    readonly_fields = ("created_at",)

@admin.register(RawMonitoredLink)
class RawMonitoredLinkAdmin(admin.ModelAdmin):
    list_display = ("id", "url", "source", "agregate_at", "to_check")
    search_fields = ("url",)
    list_filter = ("to_check",)
    readonly_fields = ("agregate_at",)

@admin.register(NetworkStatus)
class NetworkStatusAdmin(admin.ModelAdmin):
    list_display = ("id", "url", "source")
    search_fields = ("url",)
    list_filter = ("source",)

# Jeśli chcesz osobno (nie inline) HtmlNetworkSource i ManualDataSource:
@admin.register(SourceHtml)
class HtmlNetworkSourceAdmin(admin.ModelAdmin):
    list_display = ("id", "source", "title", "name", "type")
    search_fields = ("title", "name")
    list_filter = ("type",)

@admin.register(SourceManual)
class ManualDataSourceAdmin(admin.ModelAdmin):
    list_display = ("id", "source", "title", "name")
    search_fields = ("title", "name")

@admin.register(NetworkSourceVersion)
class NetworkSourceVersionAdmin(admin.ModelAdmin):
    list_display = ("id", "source", "version", "title", "created_at", "author")
    search_fields = ("title", "comment")
    readonly_fields = ("created_at",)

@admin.register(NetworkSourceError)
class NetworkSourceErrorAdmin(admin.ModelAdmin):
    list_display = ("id", "source", "error_type", "created_at")
    search_fields = ("error_message",)
    readonly_fields = ("created_at",)

