
    I`i                     V   d dl Z d dlmZmZ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mZ d dlmZ d d	lmZ  e         e j$                  d
      Zes ed       ej*                  e       dedefdZdedefdZdedefdZdedefdZddededefdZd Ze dk(  r e        yy)    N)datetimetimezone	timedelta)load_dotenv)FacebookAdsApi)Ad)AdSet)Campaign)	AdAccount)FacebookRequestErrorFB_ACCESS_TOKENzMissing FB_ACCESS_TOKEN in .env)access_tokenad_idreturnc                 ^    	 t        |       j                  ddi       y# t        $ r Y yw xY w)z%Pause (kill) a specific Ad by its ID.statusPAUSEDparamsTF)r   
api_update	Exception)r   s    2/var/www/webhook.estador.de/web/meta/bot/killer.pykill_adr      s6    
5	Xx$89      	,,adset_idc                     	 t        |       j                  ddi       y# t        $ rP 	 t        |       j                  dg      d   }t	        |      j                  ddi       Y y# t        $ r Y Y yw xY ww xY w)Nr   r   r   Tcampaign_id)fieldsF)r	   r   r   api_getr
   )r   cids     r   
kill_adsetr!   !   s    	h""8X*>"? 	/))-)A-PCSM$$Xx,@$A 		s&     	A9<A((	A51A94A55A9r   c                 ^    	 t        |       j                  ddi       y# t        $ r Y yw xY w)z+Pause (kill) a specific Campaign by its ID.r   r   r   TF)r
   r   r   )r   s    r   kill_campaignr#   .   s7    ((80D(E r   datac                     ddd| d    d| d    dd| d	    d
| d    dd| d    dd| d    d| d    dd| d    ddt        | d          d| d    g}dj                  |      S )z8Nicely formats the output into multi-line readable text.u   📊  ACCOUNT STATUS REPORTuZ   ──────────────────────────────u   🟢 Status:                r   u   💶 Total Monthly Spend:      total_monthly_spent (€)u    €u   👥 Total Monthly Leads:   total_mothly_leadsu   📈 Avg. Cost per Lead:       avg_cost_per_lead (€)u   💰 Total Daily Budget:       total_daily_budget (€)u   🗓️ Days Left in Month:    days_left_in_monthu   🔮 Expected Total:           projected_total (€)u   🎯 Monthly Cap:              monthly_cap (€)u   ⏸️ Paused Campaigns:      paused_campaignsu   📝 Note:                  note
)lenjoin)r$   liness     r   format_account_reportr3   6   s     &
d
&tH~&67
&t,G'H&IN
&t,@'A&BC
&t,E'F&GtL
&t,F'G&HM
)$/C*D)EF
&t,C'D&ETJ
&t,?'@&AF
(T2D-E)F(GH
&tF|n5E 99U    
account_idcap_eurc                 @   t        j                  t        j                        }|j	                  dddd      }|t        d      z   }|j	                  d      t        d      z   j	                  d      t        d      z
  }||z
  j                  }|t        d      z
  j                  d	      }d
\  }}		 t        |       j                  ddgd|j                  d	      |j                  d	      dd      }
|
r|
d   ni }t        |j                  dd      xs d      }|j                  dg       D ]3  }|j                  d      dk(  st        |j                  dd            }	 n |	rt        ||	z  d      nd }d}	 t        |       j                  g dddgd      }|D ]5  }|d   dk(  s|d   |k\  s|t        |j                  dd            dz  z  }7 	 |||z  z   }d}|dkD  rd }n|d!k  rd"}g d}}||k\  r>d#}	 t        |       j!                  d$gdgdd%      D ]  }|j#                  |d$           	 |t        |d      |	|t        |d      |t        |d      |||d&
}t%        |      S # t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y `w xY w)'N   r   )dayhourminutesecond)days   )r9      Z   z%Y-%m-%d)        r   spendactionsaccount)sinceuntil)level
time_range)r   r   action_typeleadvalue   rA   )daily_budgetr   created_timei  ACTIVE)limiteffective_statusr   rN   rM   d   OKiPF  u!   ⚠️ Decrease campaign budgets!i:  u!   ✅ We can create more campaigns.u8   ⚠️ Over monthly cap — pausing all active campaignsid)rQ   rP   )
r   r&   r'   r(   r)   r*   r+   r,   r-   r.   )r   nowr   utcreplacer   r=   strftimer   get_insightsfloatgetintr   roundget_ad_setsget_campaignsappendr3   )r5   r6   rU   rE   rF   	month_end	days_leftcutoff_daterB   leadsinsightsr$   actavg_cpltotal_dailyadsetsaprojected_totalr.   pausedr   cresults                          r   try_kill_accountro   I   s   
,,x||
$CKKAAaK:E9!$$E$ya'88AAaAH9Z[K\\IS&&I++55jAK LE5Z(55Y'&z@Zejesest~e  7A  B 6 
 'x{Bdhhw*/a088Ir* 	Cww}%/CGGGQ/0	 */eEEM1%DG K	:&22= xjA 3 
  	EA{h&1^+<+KuQUU>1%=>DD	E {Y67OD2	5	 2 FFK	z*88emdny|O}8~ 'ag&' %*5!_##*$)+q$9'!&!:$"F !()_    $  		sI   7BI2 I2 ?/J /J 8#J :J 2	I?>I?	JJ	JJc                      t        d       y )N120236863329350259)r!    r4   r   mainrs      s    #$r4   __main__)g     L@)!osr   r   r   dotenvr   facebook_business.apir   facebook_business.adobjects.adr   !facebook_business.adobjects.adsetr	   $facebook_business.adobjects.campaignr
   %facebook_business.adobjects.adaccountr   facebook_business.exceptionsr   getenvACCESS_TOKEN
SystemExitinitstrboolr   r!   r#   dictr3   rZ   ro   rs   __name__rr   r4   r   <module>r      s    	 2 2  0 - 3 9 ; = ryy*+
6
77    .3 4 
 
 
s t   &D* D*u D*4 D*L% zF r4   