
    Ni9                        d Z ddl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 ddlmZ  edd	g
      Z G d de	      ZdefdZdedefdZd+dededz  defdZdedefdZej3                  d       ee      fdefd       Zej3                  d       edd       edd       ee      fdededz  defd       Zej9                  d       ee      fdedefd        Zej3                  d!       edd       edd       ee      fdededz  defd"       Zej9                  d!       ee      fdedefd#       Zej3                  d$       edd%       ee      fdedefd&       Z ej9                  d$       ee      fdedefd'       Z!ej3                  d(       edd%       ee      fdedefd)       Z"ej9                  d(       ee      fdedefd*       Z#y),u  
Router `/external_api`: Inspection API integration (configurable base URL).

Routes:
  GET  /external_api/inspection/status
  GET/POST /external_api/inspection/student  (?rut= or JSON {"rut"})
  GET/POST /external_api/student
  GET/POST /external_api/inspection/professional  — Inspection getDatosFuncionario (staff by RUT)
  GET/POST /external_api/professional

Env: INSPECTION_API_BASE_URL, INSPECTION_API_USERNAME, INSPECTION_API_PASSWORD
    )	APIRouterDependsQuerystatus)JSONResponse)	BaseModel)get_current_active_user)InspectionApiClient)	UserLoginz/external_apizExternal API)prefixtagsc                   ,    e Zd ZU eed<   dZedz  ed<   y)RutBodyrutNanio)__name__
__module____qualname__str__annotations__r   int     H/var/www/pie360backend.cl/public_html/app/backend/routes/external_api.pyr   r      s    	HD#*r   r   returnc                  @    t        t        j                  ddd d      S )Ni  zQInspection API not configured (INSPECTION_API_USERNAME / INSPECTION_API_PASSWORD)r   messagedatastatus_codecontent)r   r   HTTP_503_SERVICE_UNAVAILABLEr   r   r   _not_configured_responser$   !   s&    77j
 r   resultc                     | j                  d      rt        j                  nt        j                  }t	        || j                  d      rdnd| j                  dd      | d      S )Nok   i  r   OKr   r    )getr   HTTP_200_OKHTTP_502_BAD_GATEWAYr   )r%   http_oks     r   _json_from_inspection_resultr.   ,   sV    $*JJt$4f  &:U:UG#ZZ-c3zz)T2
 r   Nr   r   c                     t               }|j                         s
t               S t        |j	                  | |            S N)r
   is_configuredr$   r.   fetch_student_data)r   r   clients      r   "_fetch_inspection_student_responser4   8   s7     "F!'))'(A(A#t(LMMr   c                 ~    t               }|j                         s
t               S t        |j	                  |             S r0   )r
   r1   r$   r.   fetch_professional_data)r   r3   s     r   '_fetch_inspection_professional_responser7   ?   s5     "F!'))'(F(Fs(KLLr   z/inspection/statussession_userc                     t               }t        t        j                  dd|j	                         |j
                  dd      S )z4Whether Inspection credentials are set (no secrets).r(   r)   )
configuredbase_urlr   r    )r
   r   r   r+   r1   r;   )r8   cs     r   inspection_statusr=   F   sC     	A&&oo/JJ

 
r   z/inspection/student.z(Student RUT (with or without formatting))descriptionu*   Año/período para consulta de inspecciónc                     t        | |      S )zJFetch student data from Inspection API (Bearer + remote student endpoint).r4   r   r   r8   s      r   inspection_student_getrB   W        .c488r   bodyc                 B    t        | j                  | j                        S )z4Same as GET with JSON body: {"rut": "12.345.678-9"}.r4   r   r   rD   r8   s     r   inspection_student_postrH   a        .dhh		BBr   z/studentc                     t        | |      S )z5Short alias for GET /external_api/inspection/student.r@   rA   s      r   student_short_getrK   j   rC   r   c                 B    t        | j                  | j                        S )z6Short alias for POST /external_api/inspection/student.rF   rG   s     r   student_short_postrM   t   rI   r   z/inspection/professionalz3Professional/staff RUT (with or without formatting)c                     t        |       S )zTFetch staff/professional data from Inspection API (remote POST getDatosFuncionario).r7   r   r8   s     r   inspection_professional_getrQ   }        3377r   c                 ,    t        | j                        S )z3Same as GET with JSON body: {"rut": "7.432.906-3"}.r7   r   rG   s     r   inspection_professional_postrU           3488<<r   z/professionalc                     t        |       S )z:Short alias for GET /external_api/inspection/professional.rO   rP   s     r   professional_short_getrX      rR   r   c                 ,    t        | j                        S )z;Short alias for POST /external_api/inspection/professional.rT   rG   s     r   professional_short_postrZ      rV   r   r0   )$__doc__fastapir   r   r   r   fastapi.responsesr   pydanticr   app.backend.auth.auth_userr	   )app.backend.classes.inspection_api_clientr
   app.backend.schemasr   external_apir   r$   dictr.   r   r   r4   r7   r*   r=   rB   postrH   rK   rM   rQ   rU   rX   rZ   r   r   r   <module>re      s   6 5 *  > I )
	i 
, 	 	, 	NC NsTz N\ NM M M &'078O0P I  (  '(S&PQT/[\%&=>9	9
*9 9 )9 () &&=>C
CC *C *S&PQT/[\%&=>9	9
*9 9 9 : &&=>C
CC C ,-S&[\%&=>8	88 .8 -. &&=>=
== /= /"S&[\%&=>8	88 #8 ?# &&=>=
== $=r   