"""User auth URLs.

Only the necessary endpoints are exposed:
- /auth/jwt/create/                   POST   login
- /auth/jwt/refresh/                  POST   refresh access token
- /auth/jwt/verify/                   POST   verify token
- /auth/users/                        GET    list users (admin)
- /auth/users/                        POST   create user (admin)
- /auth/users/me/                     GET/PATCH  current user profile
- /auth/users/{id}/                   GET/PATCH/DELETE  manage user (admin)
- /auth/users/set_password/           POST   change password
- /auth/users/reset_password/         POST   request password reset email
- /auth/users/reset_password_confirm/ POST   confirm password reset
"""

from django.urls import path
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView, TokenVerifyView

from apps.users.serializers import FlatTokenObtainPairSerializer
from djoser.views import UserViewSet

# Explicitly wire only the Djoser user views we need.
user_list = UserViewSet.as_view({"get": "list", "post": "create"})
user_detail = UserViewSet.as_view({"get": "retrieve", "patch": "partial_update", "put": "update", "delete": "destroy"})
user_me = UserViewSet.as_view({"get": "me", "patch": "me", "put": "me"})
user_set_password = UserViewSet.as_view({"post": "set_password"})
user_reset_password = UserViewSet.as_view({"post": "reset_password"})
user_reset_password_confirm = UserViewSet.as_view({"post": "reset_password_confirm"})

urlpatterns = [
    # JWT
    path("jwt/create/", TokenObtainPairView.as_view(serializer_class=FlatTokenObtainPairSerializer), name="jwt-create"),
    path("jwt/refresh/", TokenRefreshView.as_view(), name="jwt-refresh"),
    path("jwt/verify/", TokenVerifyView.as_view(), name="jwt-verify"),
    # Users
    path("users/", user_list, name="user-list"),
    path("users/me/", user_me, name="user-me"),
    path("users/<int:id>/", user_detail, name="user-detail"),
    path("users/set_password/", user_set_password, name="user-set-password"),
    path("users/reset_password/", user_reset_password, name="user-reset-password"),
    path("users/reset_password_confirm/", user_reset_password_confirm, name="user-reset-password-confirm"),
]
