
    ڵ1is!                         d dl Z d dlZd dlZd dlmZmZmZ d dlmZ  e         ej                  ej                          ej                  e      Z G d d      Zy)    N)DictAnyOptional)load_dotenv)levelc                   ,   e Zd ZdZd Z	 	 	 	 ddededeeeef      deeeef      de	d	eeef   fd
Z
ded	eeef   fdZddeeeef      d	eeef   fdZdeeef   d	eeef   fdZdedeeef   d	eeef   fdZded	eeef   fdZd	eeef   fdZy)JobAPIServicezBService for calling third-party job APIs with basic authenticationc                 ~   t        j                  d      | _        t        j                  d      | _        t        j                  d      | _        | j                  st        d      | j                  r| j                  st        d      | j                  j                  d      | _        t        j                  d       y )NTHIRD_PARTY_JOBS_URLTHIRD_PARTY_API_AUTH_USER_NAMETHIRD_PARTY_API_AUTH_PASSWORDz<THIRD_PARTY_JOBS_URL not configured in environment variableszCThird-party API credentials not configured in environment variables/z&JobAPIService initialized successfully)	osgetenvbase_urlusernamepassword
ValueErrorrstriploggerinfo)selfs    </var/www/html/drjob-dev/drjob-ai/services/job_api_service.py__init__zJobAPIService.__init__   s    		"89		"BC		"AB }}[\\}}DMMbcc ,,S1<=    Nendpointmethoddataheaderstimeoutreturnc           
         	 |j                  d      }| j                   d| }|xs i }|j                         dv r	d|vrd|d<   | j                  | j                  f}|||d}	|j                         dk(  r
|xs i |	d<   n	|xs i |	d<   t        j                  |j                         |fi |	}
|
j                  d	k\  rz|
j                  d
k  rkt        j                  d|j                          d| d|
j                          	 |
j                         }d||
j                  t        |
j                        dS t        j                  d|j                          d| d|
j                   d|
j                          dd|
j                   |
j                  |
j                  dS # t        $ r |
j                  }Y w xY w# t
        j                   j"                  $ r; d| d}t        j%                  d|j                          d| d|        d|ddcY S t
        j                   j&                  $ rJ}dt)        |       }t        j%                  d|j                          d| d|        d|ddcY d}~S d}~wt*        $ rJ}dt)        |       }t        j%                  d|j                          d| d|        d|ddcY d}~S d}~ww xY w) a  
        Make API calls to third-party job service with basic authentication
        
        Args:
            endpoint: API endpoint (without leading slash)
            method: HTTP method (GET, POST, PUT, PATCH, DELETE)
            data: Request data/parameters
            headers: Additional headers
            timeout: Request timeout in seconds
            
        Returns:
            Dict containing success status, data, and response information
        r   )POSTPUTPATCHzContent-Typezapplication/json)authr    r   GETparamsjson   i,  zJob API call successful -  z - Status: T)successr   statusr   zJob API call failed - z
 - Error: Fz!Job API call failed with status: )r,   errorr-   responsezRequest timeout after z secondszJob API timeout - z - r   )r,   r.   r-   zRequest exception: zJob API request exception - NzUnexpected error: zJob API unexpected error - )lstripr   upperr   r   requestsrequeststatus_coder   r   r)   r   textdictr   warning
exceptionsTimeoutr.   RequestExceptionstr	Exception)r   r   r   r   r   r    urlrequest_headersr&   request_paramsr/   response_data	error_msges                 r   call_job_apizJobAPIService.call_job_api$   s   *T	s+H]]O1XJ/C &mO ||~!99nTc>c2D/ MM4==1D "*N ||~&+/:2x()-v&  ''N~NH##s*x/C/Cc/I88H#kZbZnZnYopq2$,MMOM  $)&22#H$4$45	  !77Gq[YaYmYmXnnx  zB  zG  zG  yH   I  J  %@AUAU@VW&22 (	  " 2$,MMM2( ""** 	0	BILL-flln-=QxjI;WX !"  ""33 	-c!fX6ILL77Gq
RUV_U`ab !"   	,SVH5ILL6v||~6FazQTU^T_`a !" 		sb   D F= F" #F= 7A*F= "F:7F= 9F::F= =AKK0?I5/K5K?K KK
emp_job_idc                 2    d| }| j                  |d      S )z
        Get employer job details by ID
        
        Args:
            emp_job_id: Employer job ID
            
        Returns:
            Dict containing job details or error information
        zapi/employer-job/view/r'   r   r   rC   r   rD   r   s      r   get_employer_jobzJobAPIService.get_employer_job   s.     ,J<8   ! 
 	
r   r(   c                 .    d}| j                  |d|      S )z
        Get list of employer jobs with optional parameters
        
        Args:
            params: Optional query parameters for filtering
            
        Returns:
            Dict containing jobs list or error information
        zapi/employer-job/listr'   r   r   r   rG   )r   r(   r   s      r   get_employer_jobs_listz$JobAPIService.get_employer_jobs_list   s*     +   ! 
 	
r   job_datac                 .    d}| j                  |d|      S )z
        Create a new employer job
        
        Args:
            job_data: Job creation data
            
        Returns:
            Dict containing creation result or error information
        zapi/employer-job/creater#   rK   rG   )r   rM   r   s      r   create_employer_jobz!JobAPIService.create_employer_job   s*     -   ! 
 	
r   c                 4    d| }| j                  |d|      S )z
        Update an existing employer job
        
        Args:
            emp_job_id: Employer job ID
            job_data: Updated job data
            
        Returns:
            Dict containing update result or error information
        zapi/employer-job/update/r$   rK   rG   )r   rD   rM   r   s       r   update_employer_jobz!JobAPIService.update_employer_job   s1     .j\:   ! 
 	
r   c                 2    d| }| j                  |d      S )z
        Delete an employer job
        
        Args:
            emp_job_id: Employer job ID
            
        Returns:
            Dict containing deletion result or error information
        zapi/employer-job/delete/DELETErF   rG   rH   s      r   delete_employer_jobz!JobAPIService.delete_employer_job   s.     .j\:   ! 
 	
r   c                     	 | j                  ddd      }|j                  d      rdnd| j                  | j                  |dS # t        $ r.}d| j                  | j                  t        |      dcY d	}~S d	}~ww xY w)
z
        Test the API connection and credentials
        
        Returns:
            Dict containing connection test results
        z
api/healthr'   
   )r   r   r    r,   failed)connection_testr   r   r/   )rX   r   r   r.   N)rC   getr   r   r<   r;   )r   r/   rB   s      r   test_connectionzJobAPIService.test_connection   s    	((% ) H 19Y0G9X MM MM$	   	#+ MM MMQ	 	s   AA 	A;#A60A;6A;)r'   NN   )N)__name__
__module____qualname____doc__r   r;   r   r   r   intrC   rI   rL   rO   rQ   rT   rZ    r   r   r	   r	      sJ   L>* )-,0ii i tCH~&	i
 $sCx.)i i 
c3hiV
3 
4S> 
"
Xd38n-E 
QUVY[^V^Q_ 
$
DcN 
tCH~ 
$
c 
T#s(^ 
PTUXZ]U]P^ 
&
c 
d38n 
"c3h r   r	   )r   r2   loggingtypingr   r   r   dotenvr   basicConfigINFO	getLoggerr\   r   r	   ra   r   r   <module>rh      sR    	   & &     ',, '			8	$u ur   