from django.contrib import admin

from .models import (ActivityLog, CalendarEvent, Client, EmailSettings, Invoice, InvoiceItem,
                     Lead, LoginEvent, Message, Milestone, Notification,
                     OngoingService, Payment, PortfolioCategory,
                     PortfolioImage, PortfolioProject, PricingPackage,
                     ProcessStep, Project, ProjectFile, ProjectUpdate, Quote,
                     QuoteItem, Service, SiteSettings, Statistic, Task,
                     Testimonial, Ticket, TicketReply, Website,
                     WebsiteActivity, WebsiteCredential)


class QuoteItemInline(admin.TabularInline):
    model = QuoteItem
    extra = 1


class InvoiceItemInline(admin.TabularInline):
    model = InvoiceItem
    extra = 1


class MilestoneInline(admin.TabularInline):
    model = Milestone
    extra = 0


class PortfolioImageInline(admin.TabularInline):
    model = PortfolioImage
    extra = 1


class WebsiteCredentialInline(admin.TabularInline):
    model = WebsiteCredential
    extra = 0


class WebsiteActivityInline(admin.TabularInline):
    model = WebsiteActivity
    extra = 0


@admin.register(Lead)
class LeadAdmin(admin.ModelAdmin):
    list_display = ("reference", "name", "company", "project_type", "budget", "status", "created_at")
    list_filter = ("status", "source")
    search_fields = ("name", "email", "company")


@admin.register(Client)
class ClientAdmin(admin.ModelAdmin):
    list_display = ("full_name", "company", "status", "created_at")
    list_filter = ("status",)
    search_fields = ("user__first_name", "user__last_name", "user__email", "company")


@admin.register(Quote)
class QuoteAdmin(admin.ModelAdmin):
    list_display = ("number", "client_name", "title", "status", "total", "created_at")
    list_filter = ("status",)
    inlines = [QuoteItemInline]


@admin.register(Project)
class ProjectAdmin(admin.ModelAdmin):
    list_display = ("reference", "name", "client", "status", "progress", "budget", "deadline")
    list_filter = ("status", "project_type")
    search_fields = ("name", "client__company")
    prepopulated_fields = {"slug": ("name",)}
    inlines = [MilestoneInline]


@admin.register(Website)
class WebsiteAdmin(admin.ModelAdmin):
    list_display = ("name", "client", "domain", "status", "maintenance_status", "domain_expiry")
    list_filter = ("status", "maintenance_status")
    search_fields = ("name", "domain")
    prepopulated_fields = {"slug": ("name",)}
    inlines = [WebsiteCredentialInline, WebsiteActivityInline]


@admin.register(Invoice)
class InvoiceAdmin(admin.ModelAdmin):
    list_display = ("number", "client", "project", "total", "status", "due_on")
    list_filter = ("status",)
    inlines = [InvoiceItemInline]


@admin.register(Payment)
class PaymentAdmin(admin.ModelAdmin):
    list_display = ("reference", "client", "project", "amount", "method", "status", "paid_on")
    list_filter = ("method", "status")


@admin.register(Ticket)
class TicketAdmin(admin.ModelAdmin):
    list_display = ("reference", "subject", "client", "priority", "status", "created_at")
    list_filter = ("status", "priority")


@admin.register(PortfolioProject)
class PortfolioProjectAdmin(admin.ModelAdmin):
    list_display = ("name", "client_name", "category", "featured", "published", "completed_on")
    list_filter = ("category", "featured", "published")
    prepopulated_fields = {"slug": ("name",)}
    inlines = [PortfolioImageInline]


@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
    list_display = ("name", "project", "priority", "status", "due_date")
    list_filter = ("status", "priority")


admin.site.register([
    SiteSettings, EmailSettings, Service, PricingPackage, OngoingService, Testimonial, Statistic,
    ProcessStep, PortfolioCategory, Milestone, ProjectUpdate, ProjectFile,
    TicketReply, Message, Notification, ActivityLog, LoginEvent, CalendarEvent,
    WebsiteActivity, WebsiteCredential, QuoteItem, InvoiceItem,
])
admin.site.site_header = "Teniteno1 data"
