"""URL patterns for the platform_core generic API.

All generic content endpoints share the ``content/{app}/{model}/{pk}/``
prefix so they are clearly separated from domain-specific routes.
"""

from __future__ import annotations

from django.urls import path

from . import views

urlpatterns = [
    # -----------------------------------------------------------------
    # Attachments
    # -----------------------------------------------------------------
    path(
        "content/<str:app>/<str:model>/<str:pk>/attachments/",
        views.content_attachments,
        name="platform-core-attachments",
    ),
    path(
        "content/<str:app>/<str:model>/<str:pk>/attachments/<str:attachment_id>/",
        views.content_attachment_detail,
        name="platform-core-attachment-detail",
    ),
    # -----------------------------------------------------------------
    # Comments
    # -----------------------------------------------------------------
    path(
        "content/<str:app>/<str:model>/<str:pk>/comments/",
        views.content_comments,
        name="platform-core-comments",
    ),
    path(
        "content/<str:app>/<str:model>/<str:pk>/comments/<str:comment_id>/",
        views.content_comment_detail,
        name="platform-core-comment-detail",
    ),
    # -----------------------------------------------------------------
    # Activity feed
    # -----------------------------------------------------------------
    path(
        "content/<str:app>/<str:model>/<str:pk>/activity/",
        views.content_activity,
        name="platform-core-activity",
    ),
    # -----------------------------------------------------------------
    # Custom field definitions  (tenant-level, entity-type scoped)
    # -----------------------------------------------------------------
    path(
        "custom-fields/<str:entity_type>/definitions/",
        views.custom_field_definitions,
        name="platform-core-cf-definitions",
    ),
    # -----------------------------------------------------------------
    # Custom field values  (per entity instance)
    # -----------------------------------------------------------------
    path(
        "content/<str:app>/<str:model>/<str:pk>/custom-fields/",
        views.content_custom_fields,
        name="platform-core-cf-values",
    ),
    # -----------------------------------------------------------------
    # Tags — tenant CRUD
    # -----------------------------------------------------------------
    path("tags/", views.tags_list, name="platform-core-tags"),
    path("tags/<int:tag_id>/", views.tag_detail, name="platform-core-tag-detail"),
    # -----------------------------------------------------------------
    # Tags — assign / remove on entities
    # -----------------------------------------------------------------
    path(
        "content/<str:app>/<str:model>/<str:pk>/tags/",
        views.content_tags,
        name="platform-core-content-tags",
    ),
    path(
        "content/<str:app>/<str:model>/<str:pk>/tags/<int:tag_id>/",
        views.content_tag_detail,
        name="platform-core-content-tag-detail",
    ),
    # -----------------------------------------------------------------
    # Notes
    # -----------------------------------------------------------------
    path(
        "content/<str:app>/<str:model>/<str:pk>/notes/",
        views.content_notes,
        name="platform-core-notes",
    ),
    path(
        "content/<str:app>/<str:model>/<str:pk>/notes/<str:note_id>/",
        views.content_note_detail,
        name="platform-core-note-detail",
    ),
    # -----------------------------------------------------------------
    # Dynamic Forms — definitions
    # -----------------------------------------------------------------
    path("forms/definitions/", views.forms_list, name="platform-core-forms"),
    path("forms/definitions/<str:form_id>/", views.form_detail, name="platform-core-form-detail"),
    # -----------------------------------------------------------------
    # Dynamic Forms — submit (authenticated)
    # -----------------------------------------------------------------
    path(
        "forms/definitions/<str:form_id>/submit/",
        views.form_submit,
        name="platform-core-form-submit",
    ),
    # -----------------------------------------------------------------
    # Dynamic Forms — submissions list
    # -----------------------------------------------------------------
    path(
        "forms/definitions/<str:form_id>/submissions/",
        views.form_submissions,
        name="platform-core-form-submissions",
    ),
    # -----------------------------------------------------------------
    # Import Engine
    # -----------------------------------------------------------------
    # List all jobs for the tenant
    path("import/jobs/", views.import_list, name="platform-core-import-list"),
    # Per-job detail endpoints (must come before the entity_type catch-all)
    path("import/jobs/<str:job_id>/status/", views.import_status, name="platform-core-import-status"),
    path("import/jobs/<str:job_id>/errors/", views.import_errors, name="platform-core-import-errors"),
    path("import/jobs/<str:job_id>/cancel/", views.import_cancel, name="platform-core-import-cancel"),
    # Entity-type endpoints
    path("import/<str:entity_type>/template/", views.import_template, name="platform-core-import-template"),
    path("import/<str:entity_type>/", views.import_upload, name="platform-core-import-upload"),
    # -----------------------------------------------------------------
    # Export Engine
    # -----------------------------------------------------------------
    path("export/jobs/", views.export_list, name="platform-core-export-list"),
    path("export/jobs/<str:job_id>/status/", views.export_status, name="platform-core-export-status"),
    path("export/jobs/<str:job_id>/download/", views.export_download, name="platform-core-export-download"),
    path("export/jobs/<str:job_id>/cancel/", views.export_cancel, name="platform-core-export-cancel"),
    path("export/<str:entity_type>/", views.export_create, name="platform-core-export-create"),
    # -----------------------------------------------------------------
    # Print Engine
    # -----------------------------------------------------------------
    path("print/templates/", views.print_template_list, name="platform-core-print-template-list"),
    path("print/templates/<int:template_id>/", views.print_template_detail, name="platform-core-print-template-detail"),
    path("print/templates/<int:template_id>/preview/", views.print_template_preview, name="platform-core-print-template-preview"),
    # Generate PDF for a specific entity instance
    path(
        "content/<str:app_label>/<str:model_name>/<str:object_id>/print/<int:template_id>/",
        views.print_generate,
        name="platform-core-print-generate",
    ),
    # -----------------------------------------------------------------
    # Template Engine (Message Templates)
    # -----------------------------------------------------------------
    path("templates/messages/", views.message_template_list, name="platform-core-message-template-list"),
    path("templates/messages/<int:template_id>/", views.message_template_detail, name="platform-core-message-template-detail"),
    path("templates/messages/<int:template_id>/preview/", views.message_template_preview, name="platform-core-message-template-preview"),
]
