
    $j9                    J   d dl mZ d dlZd dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZ  ed	          Z ed
          Zg dZd8dZd9dZ d:dZ!d;dZ"efd<dZ#efd=dZ$d>d!Z%d?d%Z&d@d,Z'dAd.Z(dBdCd3Z)dDdEd6Z*dFd7Z+dS )G    )annotationsN)datetimetimezone)Path)Any)Sessionselect)get_settings)ActivityEventExternalPostPlatformAccount	PostDraftProviderUploadRequest
VideoAssetVideoStatusWebsiteCompanionYouTubeUploadAuditnow_utczQ/home/agent/jarvis_runtime/autoshortsbot/AutoShortsBot/data/youtube_upload_auditsz,/home/agent/projects/TrueTraceShorts_WebSite)z(erf-027-small-delivery-fee-director-passz)erf-026-fake-support-number-director-passz erf-025-mfa-prompt-without-loginpathr   returndict[str, Any]c                R    t          j        |                     d                    S )Nutf-8)encoding)jsonloads	read_text)r   s    P/home/agent/projects/AutoShorts_Dashboard/backend/app/services/reconciliation.py	read_jsonr    $   s     :dnngn66777    video_id
str | Nonec                    | rd|  nd S )Nzhttps://www.youtube.com/shorts/ )r"   s    r   youtube_urlr&   (   s    ;CM7X777Mr!   urlc                f    | sd S t          j        d|           }|r|                    d          nd S )Nz%(?:shorts/|watch\?v=)([A-Za-z0-9_-]+)   )researchgroup)r'   matchs     r   _video_id_from_urlr.   ,   s:     tI>DDE",5;;q>>>,r!   candidate_idstrc                :    |                      dd          d         S )N-   )split)r/   s    r   	_slug_keyr6   3   s    c1%%b))r!   website_rootc           
     8   t          |           }g }g }|dz  dz                      d          D ]}|                    dd          }| |v s||v rt          |          }|                    t          |          |                    d          p|                    d          |                    d	          p|                    d
          |                    d          |                    d          p@|                    d          p+|                    d          pi                     d          p| d           |dz  dz  dz                      d          D ]}|                    dd          }| |v s||v rt          j        d|          }t          j        d|          }	|                    t          |          |j	        |r|
                    d          nd |	r'|	
                    d                                          nd d           ||dS )Ndata
candidates*.jsonr   ignorer   errorsslugwebsiteSlugtitle
shortTitlevideoUrlcandidateIdr/   source)r   r?   rA   rC   r/   srccontentredflagsz*.mdztitle:\s*[\"'](.+?)[\"']zvideoUrl:\s*[\"']?([^\"'\n]+)r)   )r   r?   rA   rC   )candidate_jsonmarkdown)r6   globr   r    appendr0   getr*   r+   stemr,   strip)
r/   r7   keyr:   rJ   r   textr9   rA   videos
             r   find_website_sourcesrS   7   sI   
L
!
!CJH&5;;HEE 
 
~~wx~@@43$;;T??DD		((CDHH],C,C'**Ddhh|.D.D HHZ00 $ 7 7  !V488N;S;S  !VX\X`X`aiXjXjXpnpWuWu  wE  XF  XF  !V  JV     %	1J>DDVLL 
 
~~wx~@@43$;;I94@@EI>EEEOOD			+0:Qd6;EEKKNN00222	     )h???r!   	audit_dir
list[Path]c                    t          |           }g }|                    d          D ]6}|                    dd          }| |v s||v r|                    |           7t	          |          S )Nr;   r   r<   r=   )r6   rK   r   rL   sorted)r/   rT   rP   foundr   rQ   s         r   find_audit_filesrY   T   sv    
L
!
!CEx((  ~~wx~@@43$;;LL%==r!   sessionr   r   c                   |                      t          t                                        t          j        t
          j        k    t          j        dk                                                        }|r|S t          t
          j        ddddgd          }| 	                    |           | 
                                 |                     |           |S )Nzexisting-jarvis-uploaderz Existing Jarvis YouTube uploaderexisting_jarvis_uploader.https://www.googleapis.com/auth/youtube.uploadactive)providerdisplay_nameexternal_account_idaccount_typescopesstatus)execr	   r   wherer_   r   youtubera   firstaddcommitrefresh)rZ   accounts     r   _imported_accountrm   ^   s    ll6/22889QU]Ue9egv  hK  Oi  hi  j  j  k  k  q  q  s  sG !76/@A  G KKNNOOGNr!   auditwebsitetuple[VideoAsset, PostDraft]c                	   |                      t          t                                        t          j        |k                                                        }|                    d          p)|                    d          pi                     d          }|                    d          p>|                    d          pi                     d          pi                     d          }|                    d          p7t          j        |	                                          
                                }|sZ|                      t          t                                        t          j        |k                                                        }|s%t          ||dd||p||t          j        d	
	  	        }n[|r5|j        r't          |j                                      d          r||_        t          j        |_        t%                      |_        |                     |           |                                  |                     |           |                      t          t.                                        t.          j        |j        k    t.          j        t6          j        k                                                        }|                    d          pi                     d          pi }	|                    d          pi                     d          pi }
|s t/          |j        t6          j                  }|j        p|p|	                    d          p|j        |_        |j        p|	                    d          |_        |j         p+|                    d          p|	                    d          pg |_         |j!        p|	                    d          pd|_!        |
                    d          p+|                    d          p|                    d          pd|_"        |r5|j#        r't          |j#                                      d          r||_#        d|_        t%                      |_        |                     |           |                                  |                     |           ||fS )Nyoutube_video_idupload_resultidrA   snippetvideo_sha256imported_existing_upload r\   )	r/   
package_idrE   	file_pathchecksumworking_titleexternal_youtube_idrd   source_labeldryrun_rd   )video_asset_idr_   descriptiontags
categoryId22privacyStatusprivacy_statusprivateuploaded_private)$re   r	   r   rf   r/   rh   rM   hashlibsha256encode	hexdigestr{   r   r   r}   r0   
startswithrd   r   
updated_atri   rj   rk   r   r   rt   r_   r   rg   rA   r|   r   	tags_jsoncategory_idr   external_post_id)rZ   r/   rn   ro   rR   r"   rA   r{   draftru   rd   s              r   _ensure_video_and_draftr   p   s:   LL
++11*2I\2YZZ[[aaccEyy+,,\?1K1K1Qr0V0VW[0\0\HIIghEIIo$>$>$D"#I#I)#T#T#ZXZ"_"_`g"h"hEyy((]GN<;N;N;P;P,Q,Q,[,[,],]H `VJ//55j6IX6UVVWW]]__ %%#-/< (/3

 

 

  	1U6 	1#e>W:X:X:c:cdm:n:n 	1(0E%"3"99KKNNOOELL	**001IUX1UW`Wimum}W}~~  F  F  H  HEyy))/R44Y??E2Gii((.B33H==CF NH<LMMM+UU'++g*>*>U%BUEK)GW[[-G-GEoW6):):Wgkk&>Q>QWUWEO)NW[[-F-FN$E!::o66  A%))O:T:T  AX]XaXabrXsXs  A  xAE */ *3u7M3N3N3Y3YZc3d3d *!)%ELyyEKKNNOOE%<r!   rR   r   r   r   rA   r   c                &   |                      t          t                                        t          j        t
          j        k    t          j        |k                                                        }|st          t
          j        |          }|j	        |_
        |p|j        p|j        |_        d|_        d|_        t                      |_        |                     |           |                                  |                     |           |S )N)r_   r   r\   linked)re   r	   r   rf   r_   r   rg   r   rh   rt   r   rA   r|   r~   mapping_statusr   r   ri   rj   rk   )rZ   rR   r   r"   rA   externals         r   _upsert_external_postr      s    ||F<0066|7LPXP`7`bnb  DL  cL  M  M  N  N  T  T  V  VH V)9HUUU#hH@ek@U-@HN6H&H!))HKKNNOOHOr!   r   c                   |                      t          t                                        t          j        |j        k                                                        }|st          |j        |j                  }|                    d          pi gd         }|                    d          pi gd         }|j        |_        t          t                    |_        |                    d          p#|                    d          pt          |          |_        |                    d          p|                    d          p|j        |_        ||_        t!          |          |_        |                    d          |_        |pd|i|_        t)          |                    d	          p|                    d	                    o$t          |pd
                              d           |_        |rdn|rdnd|_        t1                      |_        |                     |           |                                  |                     |           |S )N)r   post_draft_idrJ   r   rI   r?   rA   r   r/   rC   rx   r   pushed	generatedmissing)re   r	   r   rf   r   rt   rh   rM   r   r0   WEBSITE_ROOTwebsite_repo_pathr6   r?   rA   rr   r&   video_url_internalgenerated_content_pathcandidate_payload_jsonboolr   website_link_allowedrd   r   r   ri   rj   rk   )	rZ   rR   r   r/   r"   ro   compfirst_mdfirst_candidates	            r   _upsert_website_companionr      s&   <</00667G7VZ_Zb7bccddjjllD QuxuxPPPJ''/B43H{{#344<a@OD ..DV$$^(;(;F(C(C^yQ]G^G^DIg&&U/*=*=g*F*FU%+DJ$D)(33D"*,,v"6"6D"1"Snl5SD $X\\*%=%=%`ATATU_A`A` a a  !Tjmnvn|z|j}j}  kI  kI  JS  kT  kT  gTD&[((O-Z[[QZDKiiDOKKNNOODKr!   F
audit_pathdry_runr   c                   t          |          }|                    d          p |j                            dd          d         }|                    d          p)|                    d          pi                     d          }t	          |          }|r|||t          |          dd	S t          |           }t          | |||          \  }}	|r&t          | ||	||                    d
                     | 	                    t          t                                        t          j        |k    t          j        |j        k                                                        }
|
p t          |j        |	j        |j                  }|	j        |_        |j        |_        ||_        t'          |          |_        |                    d          p@|                    d          pi                     d          pi                     d          pd|_        |                    d
          p|	j        |_        |                    d          |_        |                    d          p@|                    d          pi                     d          pi                     d          pg |_        |                    d          pi                     d          pi                     d          p|	j        |_        t3          |                    dd                    |_        t3          |                    dd                    |_        d|_        d|_        |                    d          pdg|_        |                    d          pdg|_        t3          |                    d          pi gd                             d          p0|                    d          pi gd                             d                    |_         t          |          ||                    d          d|_!        ||j        d d!|_"        tG                      |_$        | %                    |           tM          | ||	|||          }| 	                    t          tN                                        tN          j(        |k    tN          j)        *                    g d"                                                              }|rUd#|_)        ||_        |j        |_+        tG                      |_,        tG                      |_$        | %                    |           d$D ]H\  }}| %                    t[          d%|j        |||||j)        t          |          d&'                     I| .                                 ||j        |	j        ||j        |j/        |j)        t          |          d(S ))Nr/   _r)   r   rr   rs   rt   T)r/   rr   ro   r   r   rA   )r   r   platform_account_idr   rd   r   description_hashr   ru   r   containsSyntheticMediaselfDeclaredMadeForKidsFexternal_existing_uploadapi_endpoints_calledzvideos.insertoauth_scopes_usedr]   rJ   rC   rI   version)source_audit_pathr/   r   r\   )rr   r   rE   )approvedsent_to_executorupload_detected	completed)) existing_youtube_upload_detectedz Existing YouTube upload detected)existing_website_guide_detectedzExisting website guide detected)website_state_reconciledzWebsite state reconciledrR   )r/   rr   website_statusr   entity_type	entity_id
event_typelabelpayload_json)r/   r   r   rr   audit_idwebsite_slugr   r   )0r    rM   namer5   rS   r0   rm   r   r   re   r	   r   rf   rr   r   rt   rh   r   r   r&   r   rA   r   r   r   r   contains_synthetic_mediaself_declared_made_for_kidsnotify_subscribersupload_statusr   r   r   request_redacted_jsonresponse_redacted_jsonr   r   ri   r   r   expected_candidate_idrd   in_upload_audit_idcompleted_atr   rj   r?   )rZ   r   r   rn   r/   r"   ro   rl   rR   r   existingytar   requestr   r   s                   r   import_existing_auditr      s   j!!E99^,,P
0E0Ec10M0Ma0PLyy+,,\?1K1K1Qr0V0VW[0\0\H"<00G P ,(W^nqr|n}n}  KO  P  P  	P((G*7L%QQLE5 SgueXuyy?Q?QRRR||F#566<<=O=`dl=l  oA  oP  TY  T\  o\  ]  ]  ^  ^  d  d  f  fH

y(PUPXnunxyyyCC%jC#C!(++CO?33  R?9S9S9YWY8^8^_g8h8h8nln7s7s  uD  8E  8E  R  IRC		'""1ekCI 99%788CIIf%%t599_+E+E+K*P*PQZ*[*[*a_a)f)fgm)n)ntrtCM		/228b==iHHNBSST`aavejevCO#'		2JD(Q(Q#R#RC &*5995NPU+V+V&W&WC#"C2C$yy)?@@U_DUC!II&9::p?o>pC#W[[%<%<%Da$H$L$LZ$X$X  %W]d]h]hiy]z]z  ^C  @B  C  EF  ]G  ]K  ]K  LV  ]W  ]W   X   XC69*ooWcpupypy  {D  qE  qE  !F  !FC6>QTQc  pJ  "K  "KCYYCNKK$WeUL(T[\\Dll6-0066}7Z^j7jly  mA  mE  mE  Fy  Fy  Fy  mz  mz  {  {  |  |  B  B  D  DG $#+ "%&&yy$YYG y y
E
 	MgV`hm  NZ  px  LP  LW  gj  ku  gv  gv  }w  }w  x  x  x  	y  	y  	y  	yNN(EHW\W_u}  LO  LR  dh  dm  AE  AL  \_  `j  \k  \k  l  l  lr!   candidate_idslist[str] | Nonec                
   g }|pt           D ]e}t          |          }|s'|                    |dt          |          d           :|                    t	          | |d         |                     f|t          |          |dS )Nmissing_audit)r/   rd   ro   r4   )r   )itemscountr   )TARGET_CANDIDATESrY   rL   rS   r   len)rZ   r   r   rowsr/   filess         r   reconcile_candidatesr      s    D%:): P P .. 	KK]qr~]]  A  A  B  B  B)'59gNNNOOOOCII'BBBr!   c           	     
   t           dz  dz  dz  dz  }t           dz  dz  dz  dz  }|                                o|                                }g g dd}|                                r(|d                             t          |                     t           d	z  d
z  dz  }t           dz  dz  dz  dz  }||fD ]>}|                                r(|d                             t          |                     ?|r	ddddt          |          t          |          d}|d                             |           |                     t          t                                        t          j        dk                        	                                }	|	ro||	_
        t                      |	_        |                     |	           |                     t          d|	j        dd|                     |                                  |S )NrF   rG   rH   z.login-prompt-you-didn-t-start-don-t-approve.mdzmfa-prompt-without-login.mdzwaiting for approval)potential_duplicatespending_filespush_statusr   r9   r:   zpackage_real_003.jsonpublic
thumbnailsz6login-prompt-you-didn-t-start-don-t-approve-start.webppotential_duplicatezmfa-prompt-without-loginz+login-prompt-you-didn-t-start-don-t-approveuD   merge / discard pending / keep as new — requires explicit approval)rd   existing_slugpending_slugrecommendationexisting_pathpending_pathr   ro   r   z*Potential duplicate website guide detectedr   )r   existsrL   r0   re   r	   r   rf   r?   rh   duplicate_status_jsonr   r   ri   r   rt   rj   )
rZ   pendingr   	duplicateresultcandthumbpitemr   s
             r   !detect_pending_website_duplicatesr     s    U"Y.;>nnGe#i/*<?\\H  6X__%6%6I "- F
 ~~ 5&&s7||444& </2IID8#j0<?BzzEE] 3 388:: 	3?#**3q66222 +7Id ]]LL
 
 	%&--d333||F#344::;K;PTn;nooppvvxx 	)-D&%iiDOKKKK)tw[u  ~j  y}  ~  ~  ~      NNMr!   )r   r   r   r   )r"   r#   r   r#   )r'   r#   r   r#   )r/   r0   r   r0   )r/   r0   r7   r   r   r   )r/   r0   rT   r   r   rU   )rZ   r   r   r   )
rZ   r   r/   r0   rn   r   ro   r   r   rp   )rZ   r   rR   r   r   r   r"   r0   rA   r#   r   r   )rZ   r   rR   r   r   r   r/   r0   r"   r#   ro   r   r   r   )F)rZ   r   r   r   r   r   r   r   )NF)rZ   r   r   r   r   r   r   r   )rZ   r   r   r   ),
__future__r   r   r   r*   r   r   pathlibr   typingr   sqlmodelr   r	   app.core.configr
   app.models.corer   r   r   r   r   r   r   r   r   r   r   YOUTUBE_AUDIT_DIRr   r   r    r&   r.   r6   rS   rY   rm   r   r   r   r   r   r   r%   r!   r   <module>r      s   " " " " " "   				 ' ' ' ' ' ' ' '             $ $ $ $ $ $ $ $ ( ( ( ( ( (                          Dlmm tBCC   8 8 8 8N N N N- - - -* * * * BN @ @ @ @ @: ;L        $- - - -`      .1l 1l 1l 1l 1lhC C C C C! ! ! ! ! !r!   