
    k)i4                        d Z ddlmZmZmZmZmZ ddlmZm	Z	m
Z
mZmZ ddlmZ ddlmZ ddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZmZmZ  e       Zej?                  deej@                         e	e       e	e      ddedededefd       Z!ejE                  dee#ef          e	e       e	e       eddd       edddd       edd       edd       edd       edd        edd!       edd"       ed#gd$      fdeded%e$d&e$d'ee#   d(ee#   d)ee#   d*ee#   d+e$d,e$d-ee#   defd.       Z%ejE                  d/e       e	e       e	e      fd0e$dededefd1       Z&ejO                  d/e       e	e       e	e      dded0e$dededef
d2       Z(ejS                  d/e       e	e       e	e      fd0e$dededefd3       Z*y)4z6
User router for handling user-related API endpoints.
    )ListOptionalDictUnionAny)	APIRouterDependsHTTPExceptionstatusQuery)Session)EmailStr)get_db)get_current_active_userget_current_superuser)User)services)UserResponseSchemaUserCreateSchemaUserUpdateSchema/)response_modelstatus_code)dbcurrent_userr   user_inr   returnc                     t        j                  | |j                        }|rt        t        j
                  d      t        j                  | |      \  }}|t        t        j
                  |      |S )z'
    Create new user (Admin only).
    email#User with this email already existsr   detail)	user_data)r   get_user_by_emailr    r
   r   HTTP_400_BAD_REQUESTcreate_user)r   r   r   existing_userusermessages         S/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/src/apps/users/router.pyr'   r'      ss     ..rGM338
 	
 ((w?MD'|33
 	

 K    )r      zPage number)gedescription   d   zItems per page)r.   ler/   Nz Search across name, email, phone)r/   zSearch by namezFilter by emailzFilter by phonez6Filter by active status (0=all, 1=active, -1=inactive)z<Filter by verified status (0=all, 1=verified, -1=unverified)z-created_atz$Sort fields (prefix with - for desc)pageper_pagesearchnamer    phone	is_activeis_verifiedsort_byc                 V    |dz
  |z  }t        j                  | ||||||	|
||d      }|S )zR
    Retrieve users with filtering and pagination (Authenticated users only).
    r-   T)r   r5   r6   r    r7   r8   r9   r:   skiplimitpaginate)r   get_users_list)r   r   r3   r4   r5   r6   r    r7   r8   r9   r:   r<   results                r+   r?   r?   0   sL    $ 1H D $$F Mr,   z
/{user_id}user_idc                     |j                   | k7  r'|j                  st        t        j                  d      t        j                  ||       }|r|d   t        t        j                  d      |\  }}|S )z
    Get user by ID (Authenticated users only).
    
    Users can only access their own profile unless they are superusers.
    z*Not enough permissions to access this userr"   rA   r   User not found)idis_superuserr
   r   HTTP_403_FORBIDDENr   get_userHTTP_404_NOT_FOUND)rA   r   r   r@   user_schemar*   s         r+   rH   rH   V   s|     '!,*C*C11?
 	

 r73FVAY&11#
 	

 "Kr,   c                     |j                   |k7  r'|j                  st        t        j                  d      t        j                  | |      }|r|d   t        t        j                  d      |j                  rMt        j                  | |j                        }|r*|j                   |k7  rt        t        j                  d      t        j                  | ||      }|t        t        j                  d	      |S )
z[
    Update user (Users can only update their own profile unless they are superusers).
    z*Not enough permissions to update this userr"   rC   r   rD   r   r!   )rA   r$   zFailed to update user)rE   rF   r
   r   rG   r   rH   rI   r    r%   r&   update_user)r   rA   r   r   r(   
email_userupdated_users          r+   rL   rL   s   s     '!,*C*C11?
 	
 %%b':MM!,411#
 	
 }}//'--H
*--72"77<  ''GwOL33*
 	

 r,   c                    t        j                  ||       }|r4|j                  d      r#t        j                  ||       }|r
|d   r|d   S t        j                  ||       }|t        t        j                  d      |S )z>
    Delete user (Admin only - soft delete if supported).
    rC   deletedr   rD   r"   )r   soft_delete_usergetrH   delete_userr
   r   rI   )rA   r   r   soft_delete_resultuser_resultdeleted_users         r+   rS   rS      s     "222wG044Y?''G<;q>q>! ''G<L11#
 	

 r,   )+__doc__typingr   r   r   r   r   fastapir   r	   r
   r   r   sqlalchemy.ormr   pydantic.networksr   src.core.databaser   src.apps.auth.utils.authr   r   src.apps.users.models.userr   src.apps.usersr   "src.apps.users.schemas.user_commonr   r   r   routerpostHTTP_201_CREATEDr'   rR   strintr?   rH   putrL   deleterS    r,   r+   <module>ri      s   4 3 D D " & $ S + # e e	 S!3AXAXY &/ !67	  	
 	 Z8 CS#X/&/ !89aA=9"s8HI!$4VW2BC 3DE 3DE1*bcQ,jk<bc""" " 	"
 SM" 3-" C=" C=" " " #Y" 	" 0"J L);< &/ !89  		 =8 L);< &/ !!89** * 	*
 * 	* =*Z |,>? &/ !67  		 @r,   