
    hi`                     v    d Z ddlZddlZddlmZmZmZ  ej                  e      Z	dZ
 G d d      Z e       Zy)uL   
Service pour récupérer et postuler aux offres d'emploi via l'API externe
    N)DictOptionalTuplez4https://utuvibe.miabetepe.com:3000/api/v1/job-offersc            
           e Zd ZdZededeeee	   ef   fd       Z
edededeeee	   ef   fd       Zedededeeee	   ef   fd       Zedde	d	edefd
       Zede	defd       Zy)JobOfferServicez5Service pour interagir avec l'API des offres d'emploitagreturnc                    	 t          d|  }t        j                  |dd      }|j                  dk(  rd|j	                         dfS |j                  dk(  ry	t
        j                  d
|  d|j                          y# t        j                  j                  $ r t
        j                  d|         Y yt        j                  j                  $ r%}t
        j                  d|  d|        Y d}~yd}~ww xY w)uu   
        Récupère les détails d'une offre d'emploi par son tag.
        Retourne (success, data, message)
        /by-tag/   Ftimeoutverify   T   FNu"   Aucune offre trouvée avec ce tag.zErreur API offre tag=	: status=)FNu,   Erreur lors de la récupération de l'offre.zTimeout API offre tag=FNu6   Le serveur met trop de temps à répondre. Réessayez.u   Erreur réseau API offre tag=: NFNzErreur de connexion au serveur.
BASE_URLrequestsgetstatus_codejsonloggererror
exceptionsTimeoutRequestException)r   urlresponsees       F/home/www/therecruiter.miabetepe.com/app/services/job_offer_service.pyget_offer_by_tagz JobOfferService.get_offer_by_tag   s    	BJhse,C||CEBH##s*X]]_b00%%,H4SE8CWCWBXYZR""** 	YLL1#78X""33 	BLL8RsCDA	Bs*   AA= A= %A= =5C54C5C00C5user_idc                    	 t          d|  d}d|i}t        j                  ||dd      }|j                  dv rd|j	                         d	fS |j                  d
k(  ry|j                  dv rC	 |j	                         }|j                  dd	      }d|j                         v rd|dfS dd|xs dfS t        j                  d|  d|j                   d|j                          y# t        $ r d}d	}Y bw xY w# t        j                  j                  $ r t        j                  d|         Y yt        j                  j                  $ r%}t        j                  d|  d|        Y d}~yd}~ww xY w)uZ   
        Postule à une offre d'emploi.
        Retourne (success, data, message)
        r   z/applyr(   r   F)r   r   r   )r      Tr   r   r   )i  i  detailNu   déjà postuléalready_applied)Erreur lors de l'envoi de la candidature.zErreur API apply tag=r   z, body=)FNr-   zTimeout API apply tag=r   u   Erreur réseau API apply tag=r   r   )r   r   postr   r   r   	Exceptionlowerr   r   textr    r!   r"   )r   r(   r#   payloadr$   datar+   r%   s           r&   apply_to_offerzJobOfferService.apply_to_offer)   s   	BJhse62C '*G}}Sw5QH##z1X]]_b00%%,H%%3 #==?D!XXh3F %6 $(999dF$Y.YYY4SE8CWCWBXX_`h`m`m_nopO !  DF  ""** 	YLL1#78X""33 	BLL8RsCDA	BsZ   A	C3 C3 C3 +"C  C3 $C3 -2C3  C0-C3 /C00C3 35E+*E+E&&E+c                    	 t          d|  d| }t        j                  |dd      }|j                  dk(  rd|j	                         dfS |j                  d	k(  ry
t
        j                  d|  d|j                          y# t        j                  j                  $ r t
        j                  d|         Y yt        j                  j                  $ r%}t
        j                  d|  d|        Y d}~yd}~ww xY w)uc   
        Récupère le statut d'une candidature.
        Retourne (success, data, message)
        r   z/application/r   Fr   r   Tr   r   )FNu-   Aucune candidature trouvée pour cette offre.zErreur API status tag=r   )FNu+   Erreur lors de la récupération du statut.zTimeout API status tag=r   u   Erreur réseau API status tag=r   Nr   r   )r   r(   r#   r$   r%   s        r&   get_application_statusz&JobOfferService.get_application_statusN   s    	BJhse=	BC||CEBH##s*X]]_b00%%,S5cU)HDXDXCYZ[Q""** 	YLL23%89X""33 	BLL9#bDEA	Bs*   AB  
B  %B   5C87C8C33C8applicationoffer_titlec                    | j                  dd      }| j                  dd      }ddddd	d
}|j                  ||j                               }dddddd
}|j                  |d      }d}|r9	 ddlm}	 |	j                  |j	                  dd            }
|
j                  d      }|rd| dnd}| d| d| d| dS # t        $ r |}Y %w xY w)z=Formate le statut d'une candidature pour l'affichage WhatsAppstatusinconnu
applied_atr   z
En attentezEn cours d'examenu	   Acceptéeu   Refuséeu   Entretien programmé)pending	reviewingacceptedrejected	interviewu   ⏳u   🔍u   ✅u   ❌u   📞u   📊r   )datetimeZz+00:00u   %d/%m/%Y à %H:%Mu   📋 *Offre:* 
z  *Statut de votre candidature*

u   📊 *Statut:* u   
📅 *Postulé le:* u0   

_Vous serez contacté(e) en cas d'évolution._)r   
capitalizerB   fromisoformatreplacestrftimer/   )r7   r8   r:   r<   status_labelsstatus_displaystatus_iconsicondate_displayrB   dt
title_lines               r&   format_application_statusz)JobOfferService.format_application_statusg   s    95 __\26
 $,#"/
 '**663D3D3FG 
 / *-++J,>,>sH,MN!{{+>? :E~k]"5"
6 ON+ ,!N #/2 	2  *)*s   ,8B< <C
	C
offerc                     | j                  dd      }| j                  dd      }| j                  dd      }| j                  dd      }| j                  dd      }| j                  dd      }| j                  d	d      }t        |      d
kD  r|dd
 dz   }| j                  dg       }d}	|rI|dd D 
cg c]  }
d|
 	 }}
dj                  |      }	t        |      dkD  r|	dt        |      dz
   dz  }	| j                  dg       }d}|rI|dd D 
cg c]  }
d|
 	 }}
dj                  |      }t        |      dkD  r|dt        |      dz
   dz  }d| d| d| d| d| d| }|	r|d|	 z  }|r|d| z  }|d| dz  }|S c c}
w c c}
w )u:   Formate les détails d'une offre pour l'affichage WhatsApptitlezN/Acompany_namelocationcontract_typesalary_rangedescriptionr   r   i,  Nz...requirements   u     • rD   z
  _... et z autres_responsibilities   u   💼 *u   *
🏢 u   

📝 *Description:*
u   

📍 *Lieu:* u   
📄 *Contrat:* u   
💰 *Salaire:* u   

📋 *Prérequis:*
u   

🎯 *Responsabilités:*
uV   

━━━━━━━━━━━━━━━━

✅ Pour postuler, tapez */submit-*)r   lenjoin)rQ   rS   companyrU   contractsalaryrX   r   rY   req_textr	req_itemsr[   	resp_text
resp_itemsmessages                   r&   format_offer_messagez$JobOfferService.format_offer_message   s3    		'5)))NE299Z/99_e4>51iir2iir" {c!%ds+e3K yy4/;BQ/?@!6!@I@yy+H< 1$l3|+<q+@*AJJ !99%7<	0@!0DE1F1#,EJE		*-I#$q(|C0@,AA,E+FhOO	UG $Y   Z 
    

 G
    G
 	 # $'%q	, 	, U A Fs   2FFN)r   )__name__
__module____qualname____doc__staticmethodstrr   boolr   r   r'   intr4   r6   rP   ri        r&   r   r      s   ?Bc BeD(4.#,E&F B B0 "BC "B# "B%htnc8Q2R "B "BH BC B# B%htnVY@Y:Z B B0 (2t (2# (2s (2 (2T <D <S < <rs   r   )rm   loggingr   typingr   r   r   	getLoggerrj   r   r   r   job_offer_servicerr   rs   r&   <module>rx      sG      ( (			8	$AB BL $% rs   