
    ొi                     R    d dl mZ d dlmZ d dlZd dlmZ  G d d      Z e       Z	y)    N)settings)Imagec                   .    e Zd Zd Zddededz  defdZy)JobOfferServicec                     t         j                  rRt         j                  dk7  r?t        j                  t         j                         t        j                  d      | _        y d | _        y )Nzyour-gemini-key)api_keyzgemini-flash-latest)r   GEMINI_API_KEYgenai	configureGenerativeModelmodel)selfs    \/Users/theessential/Documents/Github/Quarante/therecruiter-backend/app/job_offers/service.py__init__zJobOfferService.__init__   sE    ""x'>'>BS'SOOH$;$;<../DEDJDJ    Nprompt
image_pathreturnc           
        K   | j                   sdddddgddgddd	d
S d}	 | d| g}|r&t        j                  |      }|j                  |       | j                   j	                  |      }|j
                  j                  dd      j                  dd      j                         }t        j                  |      }g d}	|	D ]  }
|
|vst        d|
        |d   j                         j                         }dj                  d |D              }|j                  d      d d }||d<   |S # t        $ r#}t        d|        dd|g g dddd
cY d }~S d }~ww xY ww)Nzexemple-offreu   Offre simuléeuG   Ceci est une offre simulée. Veuillez configurer votre clé API Gemini.u   Prérequis 1u   Prérequis 2u   Responsabilité 1u   Responsabilité 2u   Non spécifiéCDI)tagtitledescriptionrequirementsresponsibilitieslocationsalary_rangecontract_typeuA  
        Vous êtes un assistant RH expert en rédaction d'offres d'emploi.
        À partir du prompt de l'utilisateur (et de l'image si fournie), générez une offre d'emploi complète et professionnelle.

        Vous DEVEZ retourner UNIQUEMENT un JSON valide avec cette structure exacte :
        {
            "tag": "slug-court-en-kebab-case décrivant le poste (ex: dev-python-senior, designer-ux, comptable-junior). Maximum 30 caractères.",
            "title": "Titre complet du poste",
            "description": "Description détaillée du poste, de l'entreprise et du contexte",
            "requirements": ["Liste", "des", "prérequis", "et", "qualifications", "requises"],
            "responsibilities": ["Liste", "des", "responsabilités", "et", "missions"],
            "location": "Lieu de travail ou Remote",
            "salary_range": "Fourchette salariale si mentionnée, sinon 'À négocier'",
            "contract_type": "CDI, CDD, Stage, Freelance, etc."
        }

        Règles pour le tag :
        - Kebab-case uniquement (lettres minuscules et tirets)
        - Court et descriptif (ex: dev-kernel, chef-projet-it, stage-marketing)
        - Pas d'accents ni de caractères spéciaux
        - Maximum 30 caractères

        La sortie DOIT être uniquement un JSON valide, sans texte supplémentaire.
        z

Prompt de l'entreprise: z```json z```)r   r   r   zChamp manquant: r   c              3   N   K   | ]  }|j                         s|d k(  r|nd   yw)-N)isalnum).0cs     r   	<genexpr>z5JobOfferService.generate_job_offer.<locals>.<genexpr>H   s#     MAqyy{a3h!C?Ms   #%r!      zGemini Job Offer Error: zoffre-generalezNouvelle offre d'emploiu   À négocier)r   r   openappendgenerate_contenttextreplacestripjsonloads
ValueErrorlowerjoin	Exceptionprint)r   r   r   system_instructioncontent_partsimgresponser*   datarequired_fieldsfieldr   es                r   generate_job_offerz"JobOfferService.generate_job_offer   s    zz&)h!/ @%8:M$N, 0!&	 	2$	 233OPVxXYMjj,$$S)zz22=AH==((B7??rJPPRD::d#D >O( A$$'7w%?@@A
 u+##%++-C''MMMC))C."%CDKK 	,QC01'2% "$&, .!1	 		s<   EB'D, 	A"D, +E,	E5EEEEE)N)__name__
__module____qualname__r   strdictr<    r   r   r   r      s*    Js Jd
 JVZ Jr   r   )
google.generativeaigenerativeair
   app.core.configr   r-   PILr   r   job_offer_servicerB   r   r   <module>rH      s)    # $  R Rj $% r   