"""
Django Admin configuration for Thought Leadership models.
"""

from django.contrib import admin
from django.utils.html import format_html
from .models import (
    ResearchProject,
    MediaOutreach,
    AuthorProfile,
)


@admin.register(ResearchProject)
class ResearchProjectAdmin(admin.ModelAdmin):
    list_display = ('title', 'research_type', 'status_display', 'publication_date', 'impact_score_display')
    list_filter = ('research_type', 'status', 'publication_date')
    search_fields = ('title', 'description', 'objective')
    readonly_fields = ('created_at', 'updated_at', 'impact_score_display')
    
    fieldsets = (
        ('Project Information', {
            'fields': ('title', 'slug', 'description', 'research_type')
        }),
        ('Research Details', {
            'fields': ('objective', 'methodology', 'sample_size')
        }),
        ('Key Findings', {
            'fields': ('key_findings',),
            'classes': ('collapse',)
        }),
        ('Status and Timeline', {
            'fields': ('status', 'start_date', 'completion_date', 'publication_date')
        }),
        ('Distribution and Impact', {
            'fields': ('published_url', 'media_mentions', 'backlinks_generated', 'impact_score_display')
        }),
        ('Tracking', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )
    
    def status_display(self, obj):
        """Display status with color coding."""
        colors = {
            'planning': 'gray',
            'in_progress': 'blue',
            'completed': 'orange',
            'published': 'green',
            'archived': 'red',
        }
        color = colors.get(obj.status, 'gray')
        return format_html(
            '<span style="color: {}; font-weight: bold;">{}</span>',
            color,
            obj.get_status_display()
        )
    
    status_display.short_description = 'Status'
    
    def impact_score_display(self, obj):
        """Display impact score."""
        score = obj.get_impact_score()
        return format_html(
            '<span style="font-weight: bold;">{:.0f}</span>',
            score
        )
    
    impact_score_display.short_description = 'Impact Score'


@admin.register(MediaOutreach)
class MediaOutreachAdmin(admin.ModelAdmin):
    list_display = ('title', 'outreach_type', 'target_publication', 'status_display', 'roi_score_display')
    list_filter = ('outreach_type', 'status', 'pitch_date')
    search_fields = ('title', 'target_publication', 'topic', 'description')
    readonly_fields = ('created_at', 'updated_at', 'roi_score_display')
    
    fieldsets = (
        ('Outreach Information', {
            'fields': ('title', 'outreach_type', 'topic', 'description')
        }),
        ('Target Information', {
            'fields': ('target_publication', 'target_audience', 'contact_name', 'contact_email')
        }),
        ('Status and Timeline', {
            'fields': ('status', 'pitch_date', 'scheduled_date', 'completion_date')
        }),
        ('Results', {
            'fields': ('result_url', 'reach', 'engagement', 'backlinks_generated', 'roi_score_display')
        }),
        ('Tracking', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )
    
    def status_display(self, obj):
        """Display status with color coding."""
        colors = {
            'pitch_sent': 'blue',
            'in_discussion': 'orange',
            'confirmed': 'yellow',
            'completed': 'green',
            'rejected': 'red',
            'archived': 'gray',
        }
        color = colors.get(obj.status, 'gray')
        return format_html(
            '<span style="color: {}; font-weight: bold;">{}</span>',
            color,
            obj.get_status_display()
        )
    
    status_display.short_description = 'Status'
    
    def roi_score_display(self, obj):
        """Display ROI score."""
        score = obj.get_roi_score()
        return format_html(
            '<span style="font-weight: bold;">{:.0f}</span>',
            score
        )
    
    roi_score_display.short_description = 'ROI Score'


@admin.register(AuthorProfile)
class AuthorProfileAdmin(admin.ModelAdmin):
    list_display = ('name', 'title', 'years_experience', 'articles_published', 'authority_score_display')
    list_filter = ('years_experience', 'created_at')
    search_fields = ('name', 'title', 'bio', 'expertise_areas')
    readonly_fields = ('created_at', 'updated_at', 'authority_score_display')
    
    fieldsets = (
        ('Author Information', {
            'fields': ('name', 'slug', 'title', 'bio', 'photo')
        }),
        ('Credentials and Expertise', {
            'fields': ('expertise_areas', 'certifications', 'years_experience')
        }),
        ('Social Profiles', {
            'fields': ('website', 'linkedin_url', 'twitter_handle', 'github_url'),
            'classes': ('collapse',)
        }),
        ('Content and Authority', {
            'fields': ('articles_published', 'speaking_engagements', 'media_mentions', 'authority_score_display')
        }),
        ('Authority Metrics', {
            'fields': ('domain_authority', 'social_followers')
        }),
        ('Tracking', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )
    
    def authority_score_display(self, obj):
        """Display authority score."""
        score = obj.get_authority_score()
        return format_html(
            '<span style="font-weight: bold;">{:.0f}</span>',
            score
        )
    
    authority_score_display.short_description = 'Authority Score'
