a
    &hi                     @   sH   d dl Z d dlZd dlZd dlZd dlmZ eeZG dd dZdS )    N)datetimec                   @   s>   e Zd Zdd Zdd ZdddZdd	 Zd
d Zdd ZdS )ContractGeneratorc                 C   s0   d| _ d| _tj| j dd tj| jdd d S )N	templatesZ	contractsTexist_ok)template_dir
output_dirosmakedirs)self r   >/var/www/html/swiplay.fr/scambot/modules/contract_generator.py__init__
   s    zContractGenerator.__init__c                 C   s   d}t j| jd}z>t|dddd}|| W d   n1 sF0    Y  W n ty } zjtd|  |j	d	d
d
d	}t|dd	dd}|| W d   n1 s0    Y  W Y d}~n
d}~0 0 |S )u8   Crée le template LaTeX pour l'attestation sur l'honneuruf  \documentclass[11pt, a4paper]{article}

% --- PREAMBULE ---
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{geometry}
\geometry{left=2.5cm, right=2.5cm, top=3cm, bottom=3cm}
\usepackage{lmodern}

% --- DEBUT DU DOCUMENT ---
\begin{document}

\pagestyle{empty} % Pas de numérotation de page pour une attestation

\begin{center}
    \vspace*{2cm} % Espace en haut de la page
    \LARGE{\textbf{ATTESTATION SUR L'HONNEUR}}
    \vspace{2.5cm}
\end{center}

Je soussigné, ##PRENOM_NOM##, demeurant au ##ADRESSE_COMPLETE##,

\vspace{1cm}

atteste sur l'honneur être l'unique auteur-réalisateur et producteur de l'œuvre audiovisuelle dont l'URL est :

\vspace{0.5cm}

\begin{center}
    \large{\textbf{##URL_OEUVRE##}}
\end{center}

\vspace{0.5cm}

Cette œuvre a été diffusée initialement sur mon compte @##PSEUDONYME## le \textbf{##DATE_PUBLICATION##}.

\vspace{1cm}

En conséquence, je certifie détenir l'intégralité des droits d'auteur et des droits de producteur sur cette œuvre.

\vspace{2cm}

Fait pour valoir ce que de droit.

\vspace{2.5cm}

\begin{flushright}
    Fait à ##VILLE_SIGNATURE##, le \textbf{##DATE_SIGNATURE##}.
    
    \vspace{3cm} % Espace visuel avant la signature
    
    \noindent\makebox[6cm]{\hrulefill} \\ % Ligne de signature de 6cm de large
    ##PRENOM_NOM##
    
\end{flushright}

\end{document}attestation_template.texwutf-8
)encodingnewlineNu2   ⚠️ Écriture UTF-8 échouée, fallback ASCII: asciiignoreerrors)r	   pathjoinr   openwrite	Exceptionloggerwarningencodedecode)r   template_contenttemplate_pathfeZascii_contentr   r   r   create_latex_template   s    ;,>z'ContractGenerator.create_latex_template c           <         sv  z*t j| jd}t j|s(|  }z:t|ddd}| }W d   n1 sV0    Y  W nR ty   t	
d t|ddd}| }W d   n1 s0    Y  Y n0 dd	 }||d
  d|d  }	||d  d|d  d|d  }
||p|dd}||dd}||dd}||d }t d}|sVd}||}|	|
||||||d}|}| D ]:\}}|||}t	d| dt|dd  d qt	dt| d g }t|D ]8\}}t|d kr|| d!t|d"d#|  q|rTt	
d$t| d% t	d&d|dd'   n
t	d( t d)}d*|d   d+| }t	d,|  d}zt	d- tjd.d/d0dd1 }|| |j}W d   n1 s0    Y  t	d2|  t|ddd.}| }t	d3t| d4 W d   n1 s<0    Y  W n ttfy } z(t	
d5|  z|rt j|rt | t	d6 |jd7d8d9 d7}t|t| }t	
d:| d; tjd.d/d0d7d1 }|| |j}W d   n1 s0    Y  t	d<|  W nT t!y| }  z:t	"d=|   d0d>|  d?W  Y d} ~ W  Y d}~W S d} ~ 0 0 W Y d}~nPd}~0  t!y }! z.t	"d@|!  d0dA|! d?W  Y d}!~!W S d}!~!0 0 t j#| j$}"| dB}#t j|"|#}$t	dC|"  t	dD|#  t	dE|$  t j|"st	
dF|"  z"t j%|"dGdH t	dI|"  W n6 t!y }% zt	"dJ|%  W Y d}%~%n
d}%~%0 0 t &|"t j'st	"dK|"  nt	dL|"  dMdNdO|" dP| |g}&t	dQd|&  t	dRt (   zt)j*|&dGdS|"dT}'t	dU|'j+  z|'j,j ddVd9}(W n@ ty~   |'j,j dWdVd9}(Y n t!y   t-|'j,}(Y n0 |(r|(.dX})t	dYt|) dZ t|)dd[ D ].\}}*|*/ rt	d\|d]  d^|*  qz|'j0j ddVd9}+W n@ ty:   |'j0j dWdVd9}+Y n t!yV   t-|'j0}+Y n0 |+r(|+.dX},t	
d_t|, dZ t|,dd[ D ].\}}*|*/ rt	
d\|d]  d^|*  qt|)d[kr(t	d`t|)d[  da dbdc |)D }-|-r(t	"dd |-dd' D ]}.t	"d\|.  q|'j0rBt	
de|'j0  t j|"| df}/t j|/
rt	dg|/  zft|/ddd8dh>}0|0 }1di|1v rt	"dj dk|1v rt	"dl dm|1v rt	"dn |1.dX}2g }3t|2D ]\}}*do|*v sdp|*v sdq|*v 	rqdr|*v 	s(ds|* v rt1dt|du t2t|2|dv }4|2|4  |33 fdwdct4t D  q|3	rt	"dx |3dd[ D ]}5t	"d\|5  	qn
t	dy W d   n1 	s0    Y  W n6 t!
y }6 zt	
dz|6  W Y d}6~6n
d}6~60 0 nt	
d{|/  W nr t)j5
yT   t	"d| d0d}d? Y W S  t!
y }7 z.t	"d~|7  d0d|7 d?W  Y d}7~7W S d}7~70 0 |
rt j|
rt | |'j+dtkr&g d}8|8D ]4}9t j|"| |9 }:t j|:
rt |: 
qt	d|$  dG|$|#dW S t	"d|'j+ d t	"d|'j,  t	"d|'j0  t j|"| df}0t j|0rzVt|0ddd8dh0}| }1t	"d|1dd   W d   n1 s0    Y  W n6 t!y }6 zt	"d|6  W Y d}6~6n
d}6~60 0 d0d|'j+ d|'j0 d?W S W nD t!yp }; z*t	"d|;  d0t-|;d?W  Y d};~;S d};~;0 0 dS )uD   Génère un contrat PDF à partir des données utilisateur et vidéor   rr   )r   Nu4   ⚠️ Erreur UTF-8, tentative avec encodage latin-1zlatin-1c                 S   s  | st d dS t| }t dt|  g }t|D ]4\}}t|dkr:|| dt|dd|  q:|rt dd	|d
d   t	|dkrt dt	|d  d |} ddddddddddd
}d}|
 D ]T\}}|| v r| |}	| ||} ||	7 }t dt| dt| d|	 d q|dkrRt d|  dd
l}
|
jd|
jd}|| }|rt d|d
d   |d| } t d t	| d! t d" | |krt d#t|d
d$  d%t| d
d$  d& | S )'u=   Nettoie le texte pour éviter les problèmes d'encodage LaTeXu#   🧹 clean_text: texte vide ou Noner'   u"   🧹 clean_text: texte original =    (U+04X)@u)   ⚠️ Caractères non-ASCII détectés: , N
   
   ... et z autres z et z pour cent z	 dollars z diese ())
\&%$#_^~{}r      🔄 Remplacement: u    → z (z fois)u3   🔄 Total remplacements de caractères spéciaux: u6   [😀-🙏🌀-🗿🚀-🛿🇠-🇿✂-➰Ⓜ-🉑]+)flagsu   🔍 Émojis détectés:    u   🧹 u    émojis supprimésu6   ✅ Texte nettoyé - caractères français préservésu   🧹 Texte modifié: 2   u   ... → ...)r   debugstrrepr	enumerateordappendinfor   lenitemscountreplacerecompileUNICODEfindallsub)textZoriginal_textZproblematic_charsicharreplacementsZreplaced_countoldnewZ	old_countrM   Zemoji_patternZemoji_foundr   r   r   
clean_texto   s`    
"
(



0z7ContractGenerator.generate_contract.<locals>.clean_textprenomr0   nomruer-   code_postalvilleurlzURL non disponibleplatformYouTubepublished_dateu   Non spécifiéez%d/%m/%YZMON_PSEUDONYME)z##PRENOM_NOM##z##ADRESSE_COMPLETE##z##URL_OEUVRE##z##PLATEFORME##z##PSEUDONYME##z##DATE_PUBLICATION##z##VILLE_SIGNATURE##z##DATE_SIGNATURE##r=   z -> r@   rA   u    📝 Contenu contrat préparé: u    caractèresr)   r*   r+   r,   u4   ⚠️ Caractères non-ASCII dans le contenu final: u	    trouvész   Premiers 10: r.   u/   ✅ Contenu final entièrement ASCII-compatiblez%Y%m%d_%H%M%SZattestation_r8   u   📁 Nom de fichier base: u?   📝 Tentative de création du fichier temporaire avec UTF-8...r   z.texF)modesuffixdeleter   u*   ✅ Fichier temporaire créé avec UTF-8: u   🔍 Vérification fichier: u    caractères lusu+   ⚠️ Erreur UTF-8, tentative avec ASCII: u"   🧹 Nettoyage ASCII du contenu...r   r   r   u   🗑️ u1    caractères supprimés pour compatibilité ASCIIu*   ✅ Fichier temporaire créé avec ASCII: u0   ❌ Impossible de créer le fichier temporaire: u%   Erreur création fichier temporaire: )successerroru)   ❌ Erreur générale création fichier: zErreur inattendue: z.pdfu   📁 Répertoire de sortie: u   📄 Nom fichier PDF: u   📍 Chemin PDF complet: u+   ⚠️ Répertoire de sortie n'existe pas: Tr   u   ✅ Répertoire créé: u)   ❌ Impossible de créer le répertoire: u(   ❌ Pas de permission d'écriture dans: u%   ✅ Permissions d'écriture OK dans: pdflatexz-interaction=nonstopmodez-output-directory=z	-jobname=u   🔄 Exécution de pdflatex: u   📂 Répertoire de travail: <   )capture_outputtimeoutcwdu   📊 Code de retour pdflatex: rL   latin1r   u   📤 STDOUT (z	 lignes):   z      : u   📥 STDERR (r/   u    lignes supplémentairesc                 S   s(   g | ] }d |  v s d|  v r|qS )rf   failed)lower).0liner   r   r   
<listcomp>p      z7ContractGenerator.generate_contract.<locals>.<listcomp>u"   ❌ Erreurs trouvées dans STDOUT:u   ⚠️ STDERR: .logu   📋 Fichier log LaTeX créé: )r   r   z! Package inputenc Erroru0   ❌ Erreur inputenc détectée dans le log LaTeXz! LaTeX Erroru&   ❌ Erreur LaTeX générale détectéezEmergency stopu$   ❌ Arrêt d'urgence LaTeX détectézbabel Info:zPackage babel Info:zFBguill@level=!rf   r         c                    s(   g | ] }d | d  d |  qS )zLine rn   ro   r   )rr   jcontextstartr   r   rt     ru   u%   ❌ Contexte des erreurs dans le log:u<   ✅ Aucune erreur LaTeX détectée (messages Babel ignorés)u*   ⚠️ Impossible de lire le fichier log: u&   ⚠️ Fichier log LaTeX non trouvé: u.   ❌ Timeout lors de la compilation LaTeX (60s)zTimeout de compilation LaTeXu-   ❌ Erreur lors de l'exécution de pdflatex: zErreur compilation: )z.auxrv   z.outu   ✅ Contrat PDF généré: )re   pdf_pathfilenameu#   ❌ Erreur compilation LaTeX (code z):zSTDOUT: zSTDERR: z
LOG FILE: izImpossible de lire le log: zErreur compilation LaTeX (code z): u!   ❌ Erreur génération contrat: )6r	   r   r   r   existsr&   r   readUnicodeDecodeErrorr   r   getr   nowstrftimerJ   rL   rB   rD   rH   rI   rE   rF   rG   rq   tempfileNamedTemporaryFiler   nameUnicodeEncodeErrorunlinkr    r!   r   rf   abspathr   r
   accessW_OKgetcwd
subprocessrun
returncodestdoutrC   splitstripstderrmaxminextendrangeTimeoutExpired)<r   	user_data
video_datacreator_pseudo	video_urlr#   r$   r"   rX   Z
prenom_nomZadresse_completeZ
url_oeuvreZ
plateformeZdate_publicationZville_signatureZdate_signaturerU   contract_contentplaceholdervalueZproblematic_finalrS   rT   	timestampfilename_baseZtemp_tex_path	temp_fileZverify_fileZverify_contentZueZsafe_contentZremoved_charsfinal_errorZgeneral_errorr   pdf_filenamer~   Z	dir_errorZcompile_cmdresultZstdout_textZstdout_linesrs   Zstderr_textZstderr_linesZerror_linesrf   Zlog_pathZlog_fileZlog_content	log_linesZerror_contextendZ
error_lineZ	log_errorZcompile_errorZaux_extensionsextZaux_filer%   r   r{   r   generate_contract]   s   *
,Q$($ 


&<


&>
&	












&
.(

<&z#ContractGenerator.generate_contractc              
   C   s  zddl }|d}|rbtj|dgdddd}|jdkrNtd|  W dS td	|j  n
td
 dD ]`}z>tj|dgdddd}|jdkrtd|  W  W dS W qp t	tj
fy   Y qpY qp0 qptd W dS  ty } ztd|  W Y d}~dS d}~0 0 dS )u   Vérifie si LaTeX est installér   Nrg   z	--versionTr.   )ri   rR   rj   u   ✅ LaTeX détecté: u%   ⚠️ pdflatex trouvé mais erreur: u-   ⚠️ pdflatex non trouvé avec shutil.which)z/usr/bin/pdflatexz/usr/local/bin/pdflatexrg   u#   ✅ LaTeX détecté avec fallback: u/   ❌ LaTeX non détecté avec tous les fallbacksFu    ❌ Erreur vérification LaTeX: )shutilwhichr   r   r   r   rH   r   r   FileNotFoundErrorr   rf   r   )r   r   Zpdflatex_pathr   r   r%   r   r   r   check_latex_installation  s.    




z*ContractGenerator.check_latex_installationc                 C   s   zDd| dd d| dd d| dd	 d
| dd d	}|W S  ty } z*td|  dt| W  Y d}~S d}~0 0 dS )uC   Génère un contrat générique avec des placeholders à compléteru   ATTESTATION SUR L'HONNEUR

Je soussigné, [VOTRE PRÉNOM ET NOM], demeurant au [VOTRE ADRESSE COMPLÈTE],

atteste sur l'honneur être l'unique auteur-réalisateur et producteur de l'œuvre audiovisuelle intitulée :

    "titleu   TITRE DE LA VIDÉOu?   "

Cette œuvre a été diffusée initialement sur mon compte @r_   Z
PLATEFORMEz le ra   zDATE DE PUBLICATIONu]  .

En conséquence, je certifie détenir l'intégralité des droits d'auteur et des droits de producteur sur cette œuvre.

Fait pour valoir ce que de droit.

Fait à [VOTRE VILLE], le [DATE D'AUJOURD'HUI].

                                        [VOTRE SIGNATURE]
                                        [VOTRE PRÉNOM ET NOM]

URL de la vidéo : r^   Z	URL_VIDEOu   

---
⚠️ ATTENTION : Ce contrat contient des placeholders entre [crochets] à compléter avec vos informations personnelles.
📝 Utilisez la commande /register pour enregistrer vos données et générer un contrat PDF personnalisé automatiquement.u-   ❌ Erreur génération contrat générique: u,   Erreur génération du contrat générique: N)r   r   r   rf   rC   )r   contract_infoZgeneric_contractr%   r   r   r   generate_generic_contract  s    



z+ContractGenerator.generate_generic_contractc                 C   s   d}|S )u4   Guide pour installer les packages LaTeX nécessairesu  
Pour générer les contrats PDF, vous devez installer LaTeX avec les packages suivants :

Ubuntu/Debian :
sudo apt-get install texlive-latex-base texlive-fonts-recommended texlive-latex-extra texlive-lang-french

CentOS/RHEL :
sudo yum install texlive-latex texlive-collection-fontsrecommended texlive-collection-latexextra

Packages LaTeX requis :
- inputenc (UTF-8)
- fontenc (T1)
- babel (french)
- geometry
- lmodern
r   )r   Zpackages_infor   r   r   install_latex_packages%  s    z(ContractGenerator.install_latex_packagesN)r'   r'   )	__name__
__module____qualname__r   r&   r   r   r   r   r   r   r   r   r   	   s   L
   !#r   )	r	   r   r   loggingr   	getLoggerr   r   r   r   r   r   r   <module>   s   
