"""Tasks Django admin registration."""

from __future__ import annotations

from django.contrib import admin

from simorgh.apps.tasks.models import (
    Task,
    TaskAttachment,
    TaskComment,
    TaskStatusChange,
    TaskTag,
    TaskWatcher,
)


@admin.register(TaskTag)
class TaskTagAdmin(admin.ModelAdmin):
    list_display = ("name", "color", "tenant")
    list_filter  = ("tenant",)
    search_fields = ("name",)


class TaskCommentInline(admin.TabularInline):
    model  = TaskComment
    extra  = 0
    fields = ("author", "body", "is_edited", "created_at")
    readonly_fields = ("created_at",)


class TaskStatusChangeInline(admin.TabularInline):
    model  = TaskStatusChange
    extra  = 0
    fields = ("from_status", "to_status", "changed_by", "changed_at")
    readonly_fields = ("changed_at",)


@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
    list_display  = ("title", "status", "priority", "assignee", "project", "due_date", "tenant")
    list_filter   = ("status", "priority", "tenant")
    search_fields = ("title", "description")
    raw_id_fields = ("assignee", "reporter", "project", "phase", "parent", "tenant", "organization_node")
    inlines       = [TaskCommentInline, TaskStatusChangeInline]
    fieldsets = (
        (None, {"fields": ("tenant", "organization_node", "title", "description")}),
        ("Status & Priority", {"fields": ("status", "priority")}),
        ("Assignment", {"fields": ("reporter", "assignee")}),
        ("Project Link", {"fields": ("project", "phase", "parent")}),
        ("Schedule", {"fields": ("due_date", "estimated_hours", "order")}),
        ("Tags", {"fields": ("tags",)}),
    )


@admin.register(TaskAttachment)
class TaskAttachmentAdmin(admin.ModelAdmin):
    list_display = ("task", "filename", "dms_file_id", "uploaded_by")
    raw_id_fields = ("task", "uploaded_by")


@admin.register(TaskWatcher)
class TaskWatcherAdmin(admin.ModelAdmin):
    list_display = ("task", "user")
    raw_id_fields = ("task", "user")
