
    P1i'                         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	 d dl
Z
 e	       Z e
j                  e      Zd ZddZd	 Zd
 Zd Zd Zy)    )	send_mail)render_to_stringsettings)
Permission)get_user_modelNc                     	 t         j                  j                  d      } t        j                  j	                  d| dd      j                  d      j                  dd	      }t        |      S # t         j                  $ r t        j                  d
       g cY S t        $ r$}t        j                  d|        g cY d}~S d}~ww xY w)z@Get list of admin emails who should receive report notificationscan_receive_ai_report_emails)codenameTF)is_staffuser_permissionsemail__isnull	is_active )emailr   )flatz8Permission 'can_receive_ai_report_emails' does not existz!Error getting report recipients: N)r   objectsgetUserfilterexcludevalues_listlistDoesNotExistloggererror	Exception)
permissionadminses      +/home/cursorai/projects/iching/api/utils.pyget_report_recipientsr"      s    ''++5S+T
$$'	 % 

 ''
KKdK; 	 F|"" OP	 8<=	s$   A.A1 1*C	C	%C>C	C	c                    ddl m} t               }|sa|du xsC |du xr= t        |dd      xs. dt        |dd	      v xs d
t        |dd	      v xs t	        |d      }|st
        j                  d       y	 t	        | d      r| j                  }nt	        | d      r| j                  }nd}|dk(  rddl	m
}	 |	j                  }
n|dk(  rddlm} |j                  }
ng }
| ||t        |
      j                  ||      ||t        |dd       dd}|dk(  rt        | dd      |d<   n+|dk(  rt        | dd      |d<   n|dk(  rt        | dd      |d<   d|j!                          }t#        d|      }t#        d|      }t%        ||t        |dd      ||d        t
        j'                  d!| d"| j(                   d#       y# t*        $ r"}t
        j-                  d$|        Y d}~yd}~ww xY w)%ad  Send email notification to admins about new report
    
    Args:
        analysis_obj: The analysis object being reported
        analysis_type: Type of analysis ('bazi', 'liuyao', 'number')
        category: Report category
        user_message: Message from user
        silent: If True, suppress warning logs. If None, auto-detect test environment
    r   r   TNTESTINGFtestEMAIL_BACKENDr   locmemTEST_RUNNERz2No admin recipients found for report notifications
created_byuserbaziPersonliuyaor.   SITE_URLzhttp://localhost:8000z/admin/)analysis_objanalysis_typecategorycategory_displayuser_messagereporting_user	admin_urlbazi_report_timestampreport_timestampnumbernumber_report_timestampu   新的AI分析举报 - z%emails/report_admin_notification.htmlz$emails/report_admin_notification.txtDEFAULT_FROM_EMAILnoreply@example.comsubjectmessage
from_emailrecipient_listhtml_messagefail_silentlyzAdmin notification sent for  report (ID: )z#Failed to send admin notification: )django.confr   r"   getattrhasattrr   warningr)   r*   bazi.modelsr-   REPORT_CATEGORY_CHOICESliuyao.modelsr.   dictr   upperr   r   infoidr   r   )r1   r2   r3   r5   silentr   
recipientsshould_be_silentr6   r-   category_choicesr.   contextr?   rC   plain_messager    s                    r!   send_admin_report_notificationrX       s>    %&(J dN t^ )U3 1'(OR@@1GHorBB1 -0 	  NNOP8<.)44N\6*)..N!N F"*%==h&,%==! )*  $%5 6 : :8X N(,#Hj:QRSSZ[
 F"*1,@WY]*^G&'h&*1,@Y[_*`G&'h&*1,@RTX*YG&'+M,?,?,A+BC'(OQXY()OQXY!x)=?TU%%	
 	2=/|N__`ab :1#>?s   5EF; ;	G&G!!G&c           	         | r| j                   st        j                  d       y|dk7  rt        j                  d| d       y|dk(  rt	        |dd      }n(|dk(  rt	        |d	d      }n|d
k(  rt	        |dd      }nd}|r't        j                  d| d|j
                   d       y	 |dv rddlm} |j                  }n|d
k(  rddl	m
} |j                  }ng d}| ||ddddj                  ||      |t        |      j                  ||      |d}	|dk(  r!t	        |dd      |	d<   t	        |dd      |	d<   nK|dk(  r!t	        |dd      |	d<   t	        |dd      |	d<   n%|d
k(  r t	        |dd      |	d<   t	        |dd      |	d<   d |	d!    }
t        d"|	      }t        d#|	      }t        |
|t	        t        d$d%      | j                   g|d&       |dk(  rd'|_        |j#                  dg(       n?|dk(  rd'|_        |j#                  d	g(       n|d
k(  rd'|_        |j#                  dg(       t        j                  d)| d|j
                   d       y'# t(        $ r"}t        j+                  d*|        Y d}~yd}~ww xY w)+an  Send email notification to user about report resolution
    
    Args:
        user: User who submitted the report
        analysis_obj: The analysis object being reported
        analysis_type: Type of analysis ('bazi', 'liuyao', 'number')
        report_status: Status of the report ('resolved', 'dismissed')
        admin_notes: Notes from admin for the user
    z/No valid user email for resolution notificationFresolvedzNo email sent for z statusr+   !bazi_report_resolution_email_sentr:   #number_report_resolution_email_sentr.   report_resolution_email_sentzEmail already sent for rE   rF   )r+   r:   r   r,   r/   )pendingu	   待处理)rZ   	   已解决)	dismissed	   已忽略u   八字分析u   数字分析u   六爻分析)r+   r:   r.   )r*   r1   r2   analysis_type_displayreport_statusreport_status_displayadmin_notesbazi_report_resolved_atNreport_resolved_atr8   r9   number_report_resolved_atr;   u   AI分析举报处理结果 - rc   z"emails/report_user_resolution.htmlz!emails/report_user_resolution.txtr<   r=   r>   T)update_fieldsz&User resolution notification sent for z-Failed to send user resolution notification: )r   r   rJ   rP   rH   rQ   rK   r-   REPORT_STATUS_CHOICESrM   r.   r   rN   r   r   r   r[   saver\   r]   r   r   )r*   r1   r2   rd   rf   email_sent_flagr-   status_choicesr.   rV   r?   rC   rW   r    s                 r!   !send_user_resolution_notificationro   y   s    tzzHI 
"(w?@ !,0SUZ[	(	"!,0UW\]	(	"!,0NPUV-m_M,//IZZ[\]B..*#99Nh&,#99NnN (*&((& c-/*%).%9%=%=m]%[&
 F",3LB[]a,bG()*1,@WY]*^G&'h&,3LB]_c,dG()*1,@Y[_*`G&'h&,3LBVX\,]G()*1,@RTX*YG&'1':Q2R1ST'(LgV()LgV!x)=?TU JJ<%	
 F"=AL:-P,QRh&?CL<-R,STh&8<L5-K,LM<]O=YeYhYhXiijkl DQCHIs   )F+I 	J I;;J c                 \    ddl m} t        |j                        }|j	                  | |       S )z$Get display name for report categoryr   r,   )rK   r-   rN   rL   r   )r3   
BaziPerson
categoriess      r!   get_category_displayrs      s&    0j889J>>(H--    c                 @    g d}t        |      j                  | |       S )z"Get display name for report statusr^   rN   r   )statusrn   s     r!   get_status_displayrx      s    fN##FF33rt   c                 @    ddg}t        |      j                  | |       S )z>Get display text for admin action (for backward compatibility))resolver`   )dismissrb   rv   )admin_actionaction_choicess     r!   get_admin_action_displayr~      s+    
 	! N ##L,??rt   )N)django.core.mailr   django.template.loaderr   rG   r   django.contrib.auth.modelsr   django.contrib.authr   loggingr   	getLogger__name__r   r"   rX   ro   rs   rx   r~    rt   r!   <module>r      sT    & 3   1 . 			8	$(VrcL.4@rt   