﻿from django.urls import path

from interfaces.api import views as attendance
from interfaces.api_v1 import dashboard, views

attendance_urlpatterns = [
    path("attendance/today/", attendance.TodayAttendanceView.as_view(), name="v1-attendance-today"),
    path("attendance/check-in/", attendance.CheckInView.as_view(), name="v1-attendance-check-in"),
    path("attendance/checkout/", attendance.CheckOutView.as_view(), name="v1-attendance-checkout"),
    path("attendance/team/today/", attendance.AdminAttendanceTodayAllView.as_view(), name="v1-attendance-team-today"),
    path("attendance/subjects/", attendance.AttendanceSubjectsView.as_view(), name="v1-attendance-subjects"),
    path(
        "attendance/records/<int:user_id>/<str:date>/",
        attendance.AdminAttendanceEditView.as_view(),
        name="v1-attendance-record",
    ),
    path("attendance/reports/monthly/", attendance.MonthlyReportView.as_view(), name="v1-attendance-monthly"),
    path("attendance/leave-requests/", attendance.LeaveRequestListCreateView.as_view(), name="v1-leave-requests"),
    path("attendance/leave-requests/review/", attendance.AdminLeaveRequestListView.as_view(), name="v1-leave-review"),
    path("attendance/leave-requests/grant/", attendance.AdminGrantLeaveView.as_view(), name="v1-leave-grant"),
    path(
        "attendance/leave-requests/<int:pk>/approve/",
        attendance.AdminLeaveRequestApproveView.as_view(),
        name="v1-leave-approve",
    ),
    path(
        "attendance/leave-requests/<int:pk>/reject/",
        attendance.AdminLeaveRequestRejectView.as_view(),
        name="v1-leave-reject",
    ),
    path("attendance/holidays/", attendance.AdminHolidayListCreateView.as_view(), name="v1-holidays"),
    path("attendance/holidays/<int:pk>/", attendance.AdminHolidayDeleteView.as_view(), name="v1-holiday"),
    path(
        "attendance/work-schedule/default/",
        attendance.AdminWorkScheduleDefaultView.as_view(),
        name="v1-work-schedule-default",
    ),
    path("attendance/work-schedule/", attendance.AdminWorkScheduleListView.as_view(), name="v1-work-schedule-list"),
    path(
        "attendance/work-schedule/<str:date>/",
        attendance.AdminWorkScheduleForDateView.as_view(),
        name="v1-work-schedule-date",
    ),
]

from apps.tasks import api as tasks_api

tasks_urlpatterns = [
    path("tasks/", tasks_api.TaskListCreateView.as_view(), name="v1-tasks"),
    path("tasks/summary/", tasks_api.TaskSummaryView.as_view(), name="v1-task-summary"),
    path("tasks/<int:pk>/rate/", tasks_api.TaskRateView.as_view(), name="v1-task-rate"),
    path("tasks/<int:pk>/approve/", tasks_api.TaskReviewView.as_view(approve=True), name="v1-task-approve"),
    path("tasks/<int:pk>/reject/", tasks_api.TaskReviewView.as_view(approve=False), name="v1-task-reject"),
    path("tasks/assignees/", tasks_api.AssigneeListView.as_view(), name="v1-task-assignees"),
    path("tasks/<int:pk>/", tasks_api.TaskDetailView.as_view(), name="v1-task"),
]

from apps.personnel import api as personnel_api

personnel_urlpatterns = [
    path("personnel/", personnel_api.PersonnelListView.as_view(), name="v1-personnel"),
    path("personnel/contracts/<int:pk>/", personnel_api.ContractDetailView.as_view(), name="v1-contract"),
    path("personnel/<int:pk>/", personnel_api.PersonnelDetailView.as_view(), name="v1-personnel-detail"),
    path("personnel/<int:pk>/contracts/", personnel_api.ContractListCreateView.as_view(), name="v1-personnel-contracts"),
]

from apps.payroll import api as payroll_api

payroll_urlpatterns = [
    path("payroll/settings/", payroll_api.SettingsView.as_view(), name="v1-payroll-settings"),
    path("payroll/runs/", payroll_api.RunListCreateView.as_view(), name="v1-payroll-runs"),
    path("payroll/runs/<int:pk>/", payroll_api.RunDetailView.as_view(), name="v1-payroll-run"),
    path("payroll/runs/<int:pk>/calculate/", payroll_api.RunCalculateView.as_view(), name="v1-payroll-calculate"),
    path("payroll/runs/<int:pk>/approve/", payroll_api.RunApproveView.as_view(), name="v1-payroll-approve"),
    path("payroll/items/<int:pk>/", payroll_api.ItemDetailView.as_view(), name="v1-payroll-item"),
]

from apps.crm import api as crm_api

crm_urlpatterns = [
    path("crm/customers/", crm_api.CustomerListCreateView.as_view(), name="v1-crm-customers"),
    path("crm/owners/", crm_api.OwnerListView.as_view(), name="v1-crm-owners"),
    path("crm/customers/<int:pk>/", crm_api.CustomerDetailView.as_view(), name="v1-crm-customer"),
    path("crm/customers/<int:pk>/interactions/", crm_api.InteractionListCreateView.as_view(), name="v1-crm-interactions"),
    path("crm/interactions/<int:pk>/", crm_api.InteractionDeleteView.as_view(), name="v1-crm-interaction"),
]

from apps.invoicing import api as invoicing_api

invoicing_urlpatterns = [
    path("invoicing/invoices/", invoicing_api.InvoiceListCreateView.as_view(), name="v1-invoices"),
    path("invoicing/summary/", invoicing_api.InvoiceSummaryView.as_view(), name="v1-invoice-summary"),
    path("invoicing/customers/", invoicing_api.CustomerChoicesView.as_view(), name="v1-invoice-customers"),
    path("invoicing/invoices/<int:pk>/", invoicing_api.InvoiceDetailView.as_view(), name="v1-invoice"),
    path("invoicing/invoices/<int:pk>/issue/", invoicing_api.InvoiceActionView.as_view(action="issue"), name="v1-invoice-issue"),
    path("invoicing/invoices/<int:pk>/pay/", invoicing_api.InvoiceActionView.as_view(action="pay"), name="v1-invoice-pay"),
    path("invoicing/invoices/<int:pk>/cancel/", invoicing_api.InvoiceActionView.as_view(action="cancel"), name="v1-invoice-cancel"),
]

from apps.finance import api as finance_api

finance_urlpatterns = [
    path("finance/summary/", finance_api.SummaryView.as_view(), name="v1-finance-summary"),
    path("finance/unrecorded/", finance_api.UnrecordedView.as_view(), name="v1-finance-unrecorded"),
    path("finance/record/", finance_api.RecordSourceView.as_view(), name="v1-finance-record"),
    path("finance/accounts/", finance_api.AccountListCreateView.as_view(), name="v1-finance-accounts"),
    path("finance/accounts/<int:pk>/", finance_api.AccountDetailView.as_view(), name="v1-finance-account"),
    path("finance/categories/", finance_api.CategoryListCreateView.as_view(), name="v1-finance-categories"),
    path("finance/transactions/", finance_api.TransactionListCreateView.as_view(), name="v1-finance-transactions"),
    path("finance/transactions/<int:pk>/", finance_api.TransactionDetailView.as_view(), name="v1-finance-transaction"),
]

from apps.workplace import api as workplace_api

attendance_urlpatterns += [
    path("attendance/location/status/", workplace_api.StatusView.as_view(), name="v1-location-status"),
    path("attendance/location/policy/", workplace_api.PolicyView.as_view(), name="v1-location-policy"),
    path("attendance/location/my-ip/", workplace_api.MyIpView.as_view(), name="v1-location-my-ip"),
    path("attendance/location/places/", workplace_api.PlaceListCreateView.as_view(), name="v1-location-places"),
    path("attendance/location/places/<int:pk>/", workplace_api.PlaceDetailView.as_view(), name="v1-location-place"),
    path("attendance/location/networks/", workplace_api.NetworkListCreateView.as_view(), name="v1-location-networks"),
    path("attendance/location/networks/<int:pk>/", workplace_api.NetworkDetailView.as_view(), name="v1-location-network"),
    path("attendance/location/exemptions/", workplace_api.ExemptionListCreateView.as_view(), name="v1-location-exemptions"),
    path("attendance/location/exemptions/<int:pk>/", workplace_api.ExemptionDetailView.as_view(), name="v1-location-exemption"),
    path("attendance/location/punches/", workplace_api.PunchListView.as_view(), name="v1-location-punches"),
    path("attendance/location/punches/<int:pk>/approve/", workplace_api.PunchReviewView.as_view(approve=True), name="v1-punch-approve"),
    path("attendance/location/punches/<int:pk>/reject/", workplace_api.PunchReviewView.as_view(approve=False), name="v1-punch-reject"),
]

urlpatterns = attendance_urlpatterns + tasks_urlpatterns + personnel_urlpatterns + payroll_urlpatterns + crm_urlpatterns + invoicing_urlpatterns + finance_urlpatterns + [
    path("auth/login/", views.LoginView.as_view(), name="v1-login"),
    path("me/", views.MeView.as_view(), name="v1-me"),
    path("dashboard/summary/", dashboard.DashboardSummaryView.as_view(), name="v1-dashboard-summary"),
    path("organizations/", views.OrganizationListCreateView.as_view(), name="v1-organizations"),
    path("organizations/<int:org_id>/", views.OrganizationDetailView.as_view(), name="v1-organization"),
    path("organizations/<int:org_id>/modules/", views.OrganizationModulesView.as_view(), name="v1-org-modules"),
    path(
        "organizations/<int:org_id>/modules/<str:code>/enable/",
        views.OrganizationModuleToggleView.as_view(enable=True),
        name="v1-org-module-enable",
    ),
    path(
        "organizations/<int:org_id>/modules/<str:code>/disable/",
        views.OrganizationModuleToggleView.as_view(enable=False),
        name="v1-org-module-disable",
    ),
    path(
        "organizations/<int:org_id>/modules/<str:code>/request/",
        views.OrganizationModuleRequestView.as_view(),
        name="v1-org-module-request",
    ),
    path("settings/", views.SettingsView.as_view(), name="v1-settings"),
    path("settings/logo/", views.SettingsLogoView.as_view(), name="v1-settings-logo"),
    path("platform/module-requests/",views.PlatformModuleRequestListView.as_view(), name="v1-module-requests"),
    path(
        "platform/module-requests/<int:pk>/approve/",
        views.PlatformModuleRequestDecisionView.as_view(approve=True),
        name="v1-module-request-approve",
    ),
    path(
        "platform/module-requests/<int:pk>/reject/",
        views.PlatformModuleRequestDecisionView.as_view(approve=False),
        name="v1-module-request-reject",
    ),
    path("platform/directory/", views.PlatformDirectoryView.as_view(), name="v1-platform-directory"),
    path("staff/<int:membership_id>/assignments/", views.StaffAssignmentsView.as_view(), name="v1-staff-assignments"),
    path("permissions/", views.PermissionCatalogView.as_view(), name="v1-permissions"),
    path("roles/", views.RoleListCreateView.as_view(), name="v1-roles"),
    path("roles/<int:pk>/", views.RoleDetailView.as_view(), name="v1-role"),
    path("roles/<int:pk>/permissions/", views.RolePermissionsView.as_view(), name="v1-role-permissions"),
    path("members/", views.MemberListCreateView.as_view(), name="v1-members"),
    path("members/link/", views.MemberLinkView.as_view(), name="v1-member-link"),
    path("members/<int:pk>/", views.MemberDetailView.as_view(), name="v1-member"),
    path("members/<int:pk>/roles/", views.MemberRolesView.as_view(), name="v1-member-roles"),
    path("members/<int:pk>/overrides/", views.MemberOverridesView.as_view(), name="v1-member-overrides"),
    path("members/<int:pk>/overrides/<str:code>/", views.MemberOverrideDeleteView.as_view(), name="v1-member-override"),
    path("audit-logs/", views.AuditLogListView.as_view(), name="v1-audit"),
]
