"""URL map for the JSON API used by the client portals."""
from django.urls import path

from . import views_admin, views_auth, views_operator, views_passenger

urlpatterns = [
    # ---- Auth ----
    path('auth/login', views_auth.login),
    path('auth/register', views_auth.register),
    path('auth/verify-otp', views_auth.verify_otp),
    path('auth/resend-otp', views_auth.resend_otp),
    path('auth/me', views_auth.me),
    path('auth/logout', views_auth.logout),
    path('auth/logout-all', views_auth.logout_all),
    path('auth/refresh', views_auth.refresh),
    path('auth/google/start', views_auth.google_start),
    path('auth/google/callback', views_auth.google_callback),

    # ---- Operator portal ----
    path('operator/summary', views_operator.summary),
    path('operator/profile', views_operator.profile),
    path('operator/profile/delete', views_operator.delete_account),
    path('operator/profile/password', views_operator.profile_password),
    path('operator/profile/avatar', views_operator.profile_avatar),
    path('operator/buses', views_operator.buses),
    path('operator/buses/<int:bus_id>', views_operator.bus_detail),
    path('operator/buses/<int:bus_id>/seat-map', views_operator.bus_seat_map),
    path('operator/buses/<int:bus_id>/deactivate', views_operator.bus_deactivate_toggle),
    path('operator/buses/<int:bus_id>/delete', views_operator.bus_delete),
    path('operator/cities', views_operator.cities),
    path('operator/routes', views_operator.routes),
    path('operator/routes/<int:route_id>', views_operator.route_detail),
    path('operator/routes/<int:route_id>/toggle', views_operator.route_toggle),
    path('operator/schedules', views_operator.schedules),
    path('operator/schedules/<int:schedule_id>', views_operator.schedule_detail),
    path('operator/schedules/<int:schedule_id>/cancel', views_operator.schedule_cancel),
    path('operator/schedules/<int:schedule_id>/manifest', views_operator.manifest),
    path('operator/bookings', views_operator.bookings),
    path('operator/bookings/<int:booking_id>/cancel', views_operator.booking_cancel),
    path('operator/booking-cancel-reasons', views_operator.booking_cancel_reasons),
    path('operator/buses/<int:bus_id>/documents', views_operator.bus_documents),
    path('operator/buses/<int:bus_id>/documents/<str:doc_type>', views_operator.bus_document_upload),
    path('operator/schedules/<int:schedule_id>/delay', views_operator.schedule_delay),
    path('operator/ratings', views_operator.ratings),
    path('operator/export/bookings.csv', views_operator.export_bookings_csv),

    # ---- Admin portal ----
    path('admin/summary', views_admin.summary),
    path('admin/reason-codes', views_admin.reason_codes),
    path('admin/operators', views_admin.operators),
    path('admin/operators/<int:operator_id>/action', views_admin.operator_action),
    path('admin/operators/<int:operator_id>/set-password', views_admin.operator_set_password),
    path('admin/buses', views_admin.buses),
    path('admin/buses/<int:bus_id>/review', views_admin.bus_review),
    path('admin/users', views_admin.users),
    path('admin/users/<int:user_id>/action', views_admin.user_action),
    path('admin/cities', views_admin.cities),
    path('admin/provinces', views_admin.province_choices),
    path('admin/cities/<int:city_id>', views_admin.city_delete),
    path('admin/bookings', views_admin.bookings),
    path('admin/bookings/<int:booking_id>/refund', views_admin.booking_refund),
    path('admin/commission', views_admin.commission),
    path('admin/login-logs', views_admin.login_logs),
    path('admin/audit', views_admin.audit),
    path('admin/activity/passenger', views_admin.activity_passenger),
    path('admin/activity/operator', views_admin.activity_operator),
    path('admin/documents', views_admin.documents),
    path('admin/buses/<int:bus_id>/documents', views_admin.bus_documents),
    path('admin/documents/<int:doc_id>/review', views_admin.bus_document_review),
    path('admin/payments', views_admin.payments),
    path('admin/payments/<int:payment_id>/recheck', views_admin.payment_recheck),
    path('admin/webhook-logs', views_admin.webhook_logs),
    path('admin/rating-issues', views_admin.rating_issues),
    path('admin/export/bookings.csv', views_admin.export_bookings_csv),
    path('admin/export/payments.csv', views_admin.export_payments_csv),
]

urlpatterns += [
    # ---- Passenger auth ----
    # (GET /auth/me, POST /auth/logout, /auth/logout-all, /auth/refresh
    #  already work as-is for any role, including PASSENGER - reused unchanged)
    path('auth/passenger/register', views_passenger.passenger_register),
    path('auth/passenger/login', views_passenger.passenger_login),
    path('auth/passenger/verify-email', views_passenger.verify_email),
    path('auth/passenger/resend-verification', views_passenger.resend_verification),
    path('auth/passenger/forgot-password', views_passenger.forgot_password),
    path('auth/passenger/reset-password', views_passenger.reset_password),

    # ---- Trip search / seat map ----
    path('passenger/cities', views_passenger.cities),
    path('passenger/trips/search', views_passenger.trip_search),
    path('passenger/trips/<int:schedule_id>', views_passenger.trip_detail),
    path('passenger/trips/<int:schedule_id>/seats', views_passenger.seat_map),
    path('passenger/trips/<int:schedule_id>/seats/lock', views_passenger.seat_map_lock),
    path('passenger/trips/<int:schedule_id>/seats/release', views_passenger.seat_map_release),

    # ---- Bookings & payment ----
    path('passenger/bookings', views_passenger.my_bookings),            # GET: list my bookings
    path('passenger/bookings/create', views_passenger.create_booking),  # POST: create a booking
    path('passenger/bookings/<int:booking_id>', views_passenger.booking_detail),
    path('passenger/bookings/<int:booking_id>/checkout', views_passenger.checkout),
    path('passenger/bookings/<int:booking_id>/cancel-quote', views_passenger.cancel_quote),
    path('passenger/bookings/<int:booking_id>/cancel', views_passenger.cancel_booking),
    path('passenger/bookings/<int:booking_id>/ticket', views_passenger.ticket_pdf),
    path('passenger/bookings/<int:booking_id>/rate', views_passenger.rate_booking),

    # ---- Profile ----
    path('passenger/profile', views_passenger.profile),
    path('passenger/profile/update', views_passenger.update_profile),
    path('passenger/profile/password', views_passenger.change_password),
    path('passenger/profile/avatar', views_passenger.upload_avatar),

    # ---- eSewa callback (eSewa redirects the browser here directly - GET,
    #      no Authorization header possible) ----
    path('payments/passenger/esewa/success', views_passenger.esewa_success),
    path('payments/passenger/esewa/failure', views_passenger.esewa_failure),
]