from django.urls import path
from . import views
from .views import (
    EmployeeListView, EmployeeDetailView, EmployeeCreateView, EmployeeUpdateView, EmployeeDeleteView,
    DepartmentListView, DepartmentDetailView, DepartmentCreateView, DepartmentUpdateView, DepartmentDeleteView,
    PayslipListView, PayslipDetailView, generate_payslips, payslip_pdf_download,
    DeductionListView, DeductionCreateView, DeductionUpdateView, DeductionDeleteView,
    BonusListView, BonusCreateView, BonusUpdateView, BonusDeleteView, EmployeeAccountSetupView,
    EmployeeDocumentListView, EmployeeDocumentCreateView, EmployeeDocumentDeleteView, download_employee_document,
    HRDashboardView
)
from django.views.generic import RedirectView

app_name = 'hr'

urlpatterns = [
    # HR Dashboard
    path('dashboard/', HRDashboardView.as_view(), name='dashboard'),

    # Employee management URLs
    path('employees/', EmployeeListView.as_view(), name='employee_list'),
    path('employees/add/', EmployeeCreateView.as_view(), name='employee_create'),
    path('employees/<str:employee_id>/', EmployeeDetailView.as_view(), name='employee_detail'),
    path('employees/<str:employee_id>/edit/', EmployeeUpdateView.as_view(), name='employee_edit'),
    path('employees/<str:employee_id>/delete/', EmployeeDeleteView.as_view(), name='employee_delete'),
    path('employees/<str:employee_id>/send-invitation/', views.send_employee_invitation, name='send_employee_invitation'),

    # Department URLs
    path('departments/', DepartmentListView.as_view(), name='department_list'),
    path('departments/add/', DepartmentCreateView.as_view(), name='department_create'),
    path('departments/<int:pk>/', DepartmentDetailView.as_view(), name='department_detail'),
    path('departments/<int:pk>/edit/', DepartmentUpdateView.as_view(), name='department_edit'),
    path('departments/<int:pk>/delete/', DepartmentDeleteView.as_view(), name='department_delete'),

    # Payroll URLs
    path('payroll/', PayslipListView.as_view(), name='payslip_list'),
    path('payroll/generate/', generate_payslips, name='generate_payslips'),
    path('payroll/<str:payslip_number>/', PayslipDetailView.as_view(), name='payslip_detail'),
    path('payroll/<str:payslip_number>/pdf/', payslip_pdf_download, name='payslip_pdf_download'),

    # Deduction URLs
    path('deductions/', DeductionListView.as_view(), name='deduction_list'),
    path('deductions/add/', DeductionCreateView.as_view(), name='deduction_create'),
    path('deductions/<int:pk>/edit/', DeductionUpdateView.as_view(), name='deduction_edit'),
    path('deductions/<int:pk>/delete/', DeductionDeleteView.as_view(), name='deduction_delete'),

    # Bonus URLs
    path('bonuses/', BonusListView.as_view(), name='bonus_list'),
    path('bonuses/add/', BonusCreateView.as_view(), name='bonus_create'),
    path('bonuses/<int:pk>/edit/', BonusUpdateView.as_view(), name='bonus_edit'),
    path('bonuses/<int:pk>/delete/', BonusDeleteView.as_view(), name='bonus_delete'),

    # Employee account setup
    path('setup-account/<uuid:token>/', EmployeeAccountSetupView.as_view(), name='account_setup'),
    # Document URLs
    path('documents/', views.EmployeeDocumentListView.as_view(), name='document_list'),
    path('documents/upload/', views.EmployeeDocumentCreateView.as_view(), name='document_create'),
    path('documents/upload/<str:employee_id>/', views.EmployeeDocumentCreateView.as_view(), name='document_create_for_employee'),
    path('documents/<int:pk>/delete/', views.EmployeeDocumentDeleteView.as_view(), name='document_delete'),
    path('documents/<int:pk>/download/', views.download_employee_document, name='document_download'),

    # Attendance
    path('attendance/', views.AttendanceListView.as_view(), name='attendance_list'),
    path('attendance/create/', views.attendance_create, name='attendance_create'),
    path('attendance/bulk/', views.bulk_attendance_create, name='bulk_attendance_create'),

    # Invitations
    path('send-invitation/<str:employee_id>/', views.send_employee_invitation, name='send_invitation'),

    # Services Views - redirect to customers service list
    path('services/', RedirectView.as_view(pattern_name='customers:service_list', permanent=False), name='service_list'),
]