from django.contrib import admin
from django.utils.html import format_html
from .models import Event, Seminar, Organizer, Sponsor, Member, News, PastEventImage


@admin.register(Event)
class EventAdmin(admin.ModelAdmin):
    list_display = ('event_id', 'event_name', 'event_date', 'event_capacity', 'is_published', 'created_at')
    list_filter = ('is_published', 'is_deleted', 'created_at', 'event_date')
    search_fields = ('event_name', 'event_venue')
    readonly_fields = ('event_id', 'created_at', 'updated_at')
    
    fieldsets = (
        ('基本情報', {
            'fields': ('event_id', 'event_name', 'event_date', 'event_capacity', 'event_venue', 'event_venue_address')
        }),
        ('説明', {
            'fields': ('event_description', 'seminar_description', 'event_schedule')
        }),
        ('申込み期間', {
            'fields': ('registration_start_date', 'registration_end_date')
        }),
        ('セキュリティ', {
            'fields': ('entrance_password',)
        }),
        ('メディア', {
            'fields': ('event_image',)
        }),
        ('公開設定', {
            'fields': ('is_published',)
        }),
        ('削除管理', {
            'fields': ('is_deleted', 'deleted_at'),
            'classes': ('collapse',)
        }),
        ('タイムスタンプ', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )


@admin.register(Seminar)
class SeminarAdmin(admin.ModelAdmin):
    list_display = ('seminar_id', 'title', 'event', 'speaker_company', 'is_published', 'created_at')
    list_filter = ('event', 'is_published', 'is_deleted', 'created_at')
    search_fields = ('title', 'speaker_company', 'speaker_name')
    readonly_fields = ('seminar_id', 'created_at', 'updated_at')
    
    fieldsets = (
        ('基本情報', {
            'fields': ('seminar_id', 'event', 'title')
        }),
        ('内容', {
            'fields': ('description',)
        }),
        ('登壇者情報', {
            'fields': ('speaker_company', 'speaker_name', 'speaker_company_url')
        }),
        ('メディア', {
            'fields': ('speaker_company_logo',)
        }),
        ('公開設定', {
            'fields': ('is_published',)
        }),
        ('削除管理', {
            'fields': ('is_deleted', 'deleted_at'),
            'classes': ('collapse',)
        }),
        ('タイムスタンプ', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )


@admin.register(Organizer)
class OrganizerAdmin(admin.ModelAdmin):
    list_display = ('organizer_id', 'organizer_name', 'event', 'is_published', 'created_at')
    list_filter = ('event', 'is_published', 'is_deleted', 'created_at')
    search_fields = ('organizer_name', 'organizer_abbreviation')
    readonly_fields = ('organizer_id', 'created_at', 'updated_at')
    
    fieldsets = (
        ('基本情報', {
            'fields': ('organizer_id', 'organizer_name', 'organizer_abbreviation')
        }),
        ('ウェブ情報', {
            'fields': ('organizer_website_url',)
        }),
        ('メディア', {
            'fields': ('organizer_logo',)
        }),
        ('イベント', {
            'fields': ('event',)
        }),
        ('公開設定', {
            'fields': ('is_published',)
        }),
        ('削除管理', {
            'fields': ('is_deleted', 'deleted_at'),
            'classes': ('collapse',)
        }),
        ('タイムスタンプ', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )


@admin.register(Sponsor)
class SponsorAdmin(admin.ModelAdmin):
    list_display = ('sponsor_id', 'sponsor_name', 'event', 'get_sponsor_rank_display', 'is_published', 'created_at')
    list_filter = ('event', 'sponsor_rank', 'is_published', 'is_deleted', 'created_at')
    search_fields = ('sponsor_name',)
    readonly_fields = ('sponsor_id', 'created_at', 'updated_at')
    
    fieldsets = (
        ('基本情報', {
            'fields': ('sponsor_id', 'sponsor_name', 'sponsor_rank')
        }),
        ('ウェブ情報', {
            'fields': ('sponsor_website_url',)
        }),
        ('メディア', {
            'fields': ('sponsor_logo',)
        }),
        ('イベント', {
            'fields': ('event',)
        }),
        ('公開設定', {
            'fields': ('is_published',)
        }),
        ('削除管理', {
            'fields': ('is_deleted', 'deleted_at'),
            'classes': ('collapse',)
        }),
        ('タイムスタンプ', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )


@admin.register(Member)
class MemberAdmin(admin.ModelAdmin):
    list_display = ('member_id', 'full_name', 'company_name', 'email', 'event', 'is_cancelled', 'created_at')
    list_filter = ('event', 'occupation', 'is_cancelled', 'is_deleted', 'created_at')
    search_fields = ('full_name', 'company_name', 'email', 'phone_number')
    readonly_fields = ('member_id', 'created_at', 'updated_at')
    
    fieldsets = (
        ('会員情報', {
            'fields': ('member_id', 'event')
        }),
        ('企業情報', {
            'fields': ('company_name', 'company_name_kana', 'department', 'position')
        }),
        ('個人情報', {
            'fields': ('full_name', 'email', 'phone_number', 'occupation')
        }),
        ('アンケート・コメント', {
            'fields': ('questionnaire_response', 'free_comment')
        }),
        ('同意', {
            'fields': ('privacy_policy_agreed',)
        }),
        ('キャンセル情報', {
            'fields': ('is_cancelled', 'cancelled_at'),
            'classes': ('collapse',)
        }),
        ('削除管理', {
            'fields': ('is_deleted', 'deleted_at'),
            'classes': ('collapse',)
        }),
        ('タイムスタンプ', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )
    
    def get_readonly_fields(self, request, obj=None):
        if obj:  # 既存オブジェクトの編集
            return self.readonly_fields + ('member_id', 'event', 'company_name', 'full_name', 'email')
        return self.readonly_fields


@admin.register(News)
class NewsAdmin(admin.ModelAdmin):
    list_display = ('news_id', 'title', 'event', 'news_type', 'news_date', 'is_published', 'created_at')
    list_filter = ('event', 'news_type', 'is_published', 'is_deleted', 'news_date')
    search_fields = ('title', 'description')
    readonly_fields = ('news_id', 'created_at', 'updated_at')
    
    fieldsets = (
        ('基本情報', {
            'fields': ('news_id', 'event', 'news_date', 'news_type')
        }),
        ('内容', {
            'fields': ('title', 'description')
        }),
        ('公開設定', {
            'fields': ('is_published',)
        }),
        ('削除管理', {
            'fields': ('is_deleted', 'deleted_at'),
            'classes': ('collapse',)
        }),
        ('タイムスタンプ', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )


@admin.register(PastEventImage)
class PastEventImageAdmin(admin.ModelAdmin):
    list_display = ('image_id', 'event', 'display_order', 'caption', 'is_published', 'created_at')
    list_filter = ('event', 'is_published', 'is_deleted', 'created_at')
    search_fields = ('caption',)
    readonly_fields = ('image_id', 'created_at', 'updated_at', 'image_preview')
    
    fieldsets = (
        ('基本情報', {
            'fields': ('image_id', 'event', 'display_order')
        }),
        ('画像', {
            'fields': ('image', 'image_preview')
        }),
        ('キャプション', {
            'fields': ('caption',)
        }),
        ('公開設定', {
            'fields': ('is_published',)
        }),
        ('削除管理', {
            'fields': ('is_deleted', 'deleted_at'),
            'classes': ('collapse',)
        }),
        ('タイムスタンプ', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )
    
    def image_preview(self, obj):
        if obj.image:
            return format_html(
                '<img src="{}" width="300" height="auto" />',
                obj.image.url,
            )
        return "画像がありません"
    image_preview.short_description = '画像プレビュー'
