from django.urls import path
from .views import *
from .channel_views import (
    ChannelSettingsDetailView, ChannelSettingsUpdateView, ChannelSettingsListView
)
from .views_city_tax import (
    StructureCityTaxSettingsAPIView,
    CityTaxRatesAPIView
)
from .views_city_tax_preview import CityTaxPreviewAPIView
from .views_city_tax_export import CityTaxExportAPIView
from .views_city_tax_history import CityTaxReportHistoryAPIView
from .views_invoice_settings import StructureInvoiceSettingsAPIView
from istat.views import (
    IstatCalendarAPIView,
    IstatExportStructureAPIView,
    IstatFixIssuesAPIView,
    IstatIssuesSummaryAPIView,
    IstatPreviewAPIView,
)
from istat.integration_views import (
    IstatAuditLogAPIView,
    IstatCredentialAPIView,
    IstatManualSyncAPIView,
    IstatSyncHistoryAPIView,
)

urlpatterns = [
    # Existing structure URLs
    path("", StructureListCreateView.as_view(), name="structure-list-create"),
    path("<int:pk>/", StructureRetrieveUpdateDestroyView.as_view(), name="structure-detail"),
    path(
        "<int:structure_id>/invoice-settings/",
        StructureInvoiceSettingsAPIView.as_view(),
        name="structure-invoice-settings",
    ),
    # NEW: All structures with users
    path("users/", AllStructureUsersView.as_view(), name="all-structure-users"),

    # Structure-User Management URLs (existing)
    path("<int:structure_id>/users/", StructureUsersListView.as_view(), name="structure-users-list"),
    path("<int:structure_id>/users/create/", CreateStructureUserView.as_view(), name="structure-user-create"),
    path("<int:structure_id>/users/add-existing/", AddExistingUsersToStructureView.as_view(), name="structure-users-add-existing"),
    path("<int:structure_id>/users/<int:user_id>/", DeleteStructureUserView.as_view(), name="structure-user-delete"),
    path("<int:structure_id>/users/<int:user_id>/role/", UpdateStructureUserRoleView.as_view(), name="structure-user-role-update"),

    # NEW: Invitation URLs
    path("<int:structure_id>/invite/", SendStructureInvitationView.as_view(), name="structure-invite"),
    path("invite/", SendGeneralInvitationView.as_view(), name="general-invite"),
    path("invitations/<uuid:invitation_id>/", InvitationDetailView.as_view(), name="invitation-detail"),
    path("invitations/<uuid:invitation_id>/accept/", AcceptInvitationView.as_view(), name="accept-invitation"),
    path("invitations/<uuid:invitation_id>/delete/", DeleteInvitationView.as_view(), name="delete-invitation"),
    path("invitations/<uuid:invitation_id>/resend/", ResendInvitationView.as_view(), name="resend-invitation"),
    path("invitations/<uuid:invitation_id>/cancel/", CancelInvitationView.as_view(), name="cancel-invitation"),

    path("invitations/my/", MyInvitationsListView.as_view(), name="my-invitations"),
    path("invitations/all", AllInvitationsListView.as_view(), name="all-invitations"),

    path("channel-settings/", ChannelSettingsListView.as_view(), name="channel-settings-list"),
    path("<int:structure_id>/channel-settings/", ChannelSettingsDetailView.as_view(), name="channel-settings-detail"),
    path("<int:structure_id>/channel-settings/update/", ChannelSettingsUpdateView.as_view(), name="channel-settings-update"),


    # ============================
    # CITY TAX MONTHLY RATES
    # ============================
    path(
        "<int:structure_id>/city-tax/settings/",
        StructureCityTaxSettingsAPIView.as_view()
    ),
    path(
        "<int:structure_id>/city-tax/rates/",
        CityTaxRatesAPIView.as_view()
    ),
    path(
        "<int:structure_id>/city-tax/preview/",
        CityTaxPreviewAPIView.as_view()
    ),
    path(
        "<int:structure_id>/city-tax/export",
        CityTaxExportAPIView.as_view()
    ),
    path(
        "<int:structure_id>/city-tax/history/",
        CityTaxReportHistoryAPIView.as_view()
    ),
    path(
        "<int:structure_id>/istat/preview/",
        IstatPreviewAPIView.as_view()
    ),
    path(
        "<int:structure_id>/istat/credentials",
        IstatCredentialAPIView.as_view(),
        name="istat-credentials-no-slash",
    ),
    path(
        "<int:structure_id>/istat/credentials/",
        IstatCredentialAPIView.as_view(),
        name="istat-credentials",
    ),
    path(
        "<int:structure_id>/istat/sync",
        IstatManualSyncAPIView.as_view(),
        name="istat-sync-no-slash",
    ),
    path(
        "<int:structure_id>/istat/sync/",
        IstatManualSyncAPIView.as_view(),
        name="istat-sync",
    ),
    path(
        "<int:structure_id>/istat/sync-history/",
        IstatSyncHistoryAPIView.as_view(),
        name="istat-sync-history",
    ),
    path(
        "<int:structure_id>/istat/audit-logs/",
        IstatAuditLogAPIView.as_view(),
        name="istat-audit-logs",
    ),
    path(
        "<int:structure_id>/istat/calendar/",
        IstatCalendarAPIView.as_view(),
        name="istat-calendar",
    ),
    path(
        "<int:structure_id>/istat/issues-summary/",
        IstatIssuesSummaryAPIView.as_view(),
        name="istat-issues-summary",
    ),
    path(
        "<int:structure_id>/istat/fix-issues/",
        IstatFixIssuesAPIView.as_view(),
        name="istat-fix-issues",
    ),
    path(
        "<int:structure_id>/istat/export",
        IstatExportStructureAPIView.as_view()
    ),
]
