o
    ;w5h'                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
 d dlmZmZ d dlZd dlmZ e  Zed ed d Zeed d Zed d	 Zed d
 Zed d ZdZdZe Zejedgddgdgd eddZdd Zde fddZ!dd Z"dd Z#e$de fdefddZ%e&deefde fd d!Z'e&d"eefd#ede fd$d%Z(e)d&krej*ed'd(d) dS dS )*    N)FastAPIDependsHTTPExceptionstatus)OAuth2PasswordBearerOAuth2PasswordRequestForm)CORSMiddlewarez
config.iniDATABASE
MYSQL_HOST
MYSQL_PORT
MYSQL_USERMYSQL_PASSWORDMYSQL_DB@ef7bd031dc150392a94e4aae97ee3e25cafa7ae0b6080964a91bba445d3bd8acHS256*T)allow_originsallow_credentialsallow_methodsallow_headerslogin)tokenUrlc                   C   s   t jtttttt jjdS )N)hostportuserpassworddatabasecursorclass)	pymysqlconnectDB_HOSTDB_PORTDB_USERDB_PASSWORDDB_NAMEcursors
DictCursor r'   r'   6/var/www/html/socialpigeon-dashboard/dashboard-main.pyget_db    s   r)   tokenc                 C   sT   zt j| ttgd}|W S  t jy   ttjdd t jy)   ttjddw )N)
algorithmszToken expiredstatus_codedetailzInvalid token)	jwtdecode
SECRET_KEY	ALGORITHMExpiredSignatureErrorr   r   HTTP_401_UNAUTHORIZEDInvalidTokenError)r*   payloadr'   r'   r(   verify_token+   s   r7   c                 C   s&   t | tr| dd} tt| dS )N, )
isinstancestrreplaceintfloatvaluer'   r'   r(   clean_and_format4   s   
rA   c                 C   s   t | ttfr	| S z9t|   } | dr"t| d d d W S | dr2t| d d d W S | ddd r@t| W S W d	S    Y d	S )
Nki  mi@B .r9      r   )	r:   r=   r>   r;   lowerstripendswithr<   isdigitr?   r'   r'   r(   parse_number9   s   


rK   z/login	form_datac                 C   s   t  }| }|d| jf | }|r"t| j |d  s)t	t
jdd|d|d f | }|s?t	t
jdd|d tj tjd	d
 d}tj|ttd}dd|ddd|d dd}|S )Nz&SELECT * FROM users WHERE UserEmail=%sUserPasszInvalid credentialsr,   z$SELECT * FROM brands WHERE UserId=%sUserIdzBrand not foundBrandIdrF   )hours)brand_idexp)	algorithm   Successbeareri  super_admin	BrandName)access_token
token_type	expire_in	user_type
brand_namecoder   data)r)   cursorexecuteusernamefetchonebcryptcheckpwr   encoder   r   r4   HTTP_404_NOT_FOUNDdatetimeutcnow	timedeltar/   r1   r2   )rL   dbra   r   brandtoken_payloadr*   response_datar'   r'   r(   r   H   s"    z/brand/campaignsc           
      C   s   t | }|d }t }| }|d|f | }|d |d d|d d|d dd}|d	|f | }|  |D ]}t|d
 trQt	|d
 |d
< |d
 d|d
< q@dd||dd}	|	S )NrQ   a  
               SELECT 
                   COUNT(DISTINCT ci.CampaignInfoId) AS total_campaigns, 
                   IFNULL(SUM(ci.Budget), 0) AS total_budget,
                   IFNULL(SUM(cfb.DepositAmount), 0) AS total_paid, 
                   (IFNULL(SUM(ci.Budget), 0) - IFNULL(SUM(cfb.DepositAmount), 0)) AS pending_amount
               FROM campaigninfo ci
               INNER JOIN cashflowbrand cfb ON ci.CampaignInfoId = cfb.CampaignInfoId
               WHERE ci.BrandId = %s
           total_campaignstotal_budget,.0f
total_paidpending_amount)rp   rq   rs   rt   z
        SELECT CampaignInfoId as CamapignId, CampaignName, Budget, StartDate, EndDate,InfluencerCategory,CampaignType,
        Audience,SocialMediaPlatforms FROM campaigninfo WHERE BrandId=%s
    BudgetrT   rU   )kpis	campaignsr^   )
r7   r)   ra   rb   rd   fetchallcloser:   r;   r=   )
r*   rm   rQ   rl   ra   resultformatted_resultrw   campaignro   r'   r'   r(   list_campaignsg   s6   	


	r}   z/brand/campaigns/{campaign_id}campaign_idc              	   C   s  t |}|d }t }| }|d| |f | }|s$ttjddt|d t	r3t
|d |d< |d d|d< |d| f | }|D ]&}dD ]!}	t||	 t	r_||	 d	d
||	< t||	 }
t
|
d	||	< qLqH|d|| f | }t|d |d< t|d |d< t|d |d< g }|D ]}|d }|d| |f | }|r!|d r!|d }|d r|d d	ng }|d|f | }g }t|D ]E\}}| |t|k r|| d nd|t|k r|| d nd|t|k r|| d nd|t|k r|| d ndd}|| q||d< ||d< q|d |d |d |d |d |d}dd |d!}|  |S )"NrQ   zASELECT * FROM campaigninfo WHERE CampaignInfoId=%s AND BrandId=%sz"Campaign not found or unauthorizedr,   ru   rr   a  
    SELECT inf.InfluencerID,
    CONCAT(inf.FirstName, ' ', inf.LastName) AS 'Name',
    inf.Category,inf.Profilepic,
    IFNULL(NULLIF(infs.YouTubeFollowers, ''), 0) AS YouTubeFollowers,
    IFNULL(NULLIF(infs.FacebookFollowers, ''), 0) AS FacebookFollowers,
    IFNULL(NULLIF(infs.InstagramFollowers, ''), 0) AS InstagramFollowers,
    IFNULL(NULLIF(infs.TiktokFollowers, ''), 0) AS TiktokFollowers,
    IFNULL(NULLIF(infs.LinkedInFollowers, ''), 0) AS LinkedInFollowers,
    IFNULL(NULLIF(infs.TwitterFollowers, ''), 0) AS TwitterFollowers
    FROM campiagnexecution ce  
    INNER JOIN influencers inf ON inf.InfluencerID = ce.InfluencerID
    INNER JOIN influencersocialmedia infs ON infs.InfluencerID = inf.InfluencerID
    WHERE ce.CampaignInfoId  = %s )YouTubeFollowersFacebookFollowersInstagramFollowersTiktokFollowersLinkedInFollowersTwitterFollowersr8   r9   a  
             SELECT 
                IFNULL(SUM(ci.Budget), 0) AS total_budget,
                IFNULL(SUM(cfb.DepositAmount), 0) AS total_paid, 
                (IFNULL(SUM(ci.Budget), 0) - IFNULL(SUM(cfb.DepositAmount), 0)) AS pending_amount
            FROM campaigninfo ci
            INNER JOIN cashflowbrand cfb ON ci.CampaignInfoId = cfb.CampaignInfoId
            WHERE ci.BrandId = %s AND ci.CampaignInfoId = %s
        rq   rs   rt   InfluencerIDz
        SELECT CampaignDetailId, InstagramUrl 
        FROM campaigndetail cd 
        WHERE CampaignInfoId = %s AND InfluencerID = %s
        InstagramUrlCampaignDetailIdz
            SELECT ins.Reactions, ins.Comments, ins.Shares, ins.Views 
            FROM insights ins 
            WHERE ins.CampaignDetailId = %s
            	Reactionsr   CommentsSharesViews)link	reactionscommentssharesviewscampaign_detail_idpostsCampaignNameCampaignType)campaign_namecampaign_typerq   amount_paidamount_pendinginfluencersrT   rU   r^   )r7   r)   ra   rb   rd   r   r   rh   r:   r;   r=   rx   r<   rK   rA   split	enumeraterH   lenappendry   )r~   r*   rm   rQ   rl   ra   r|   r   
influencerkeyr@   
financialsinfluencer_postsinfluencer_idcampaign_detailr   instagram_urlsinsights
posts_dataiurl	post_datar`   ro   r'   r'   r(   get_campaign_details   s   	
r   __main__z	127.0.0.1i@  )r   r   )+configparserr   pymysql.cursorsre   r/   ri   fastapir   r   r   r   fastapi.securityr   r   uvicornfastapi.middleware.corsr   ConfigParserconfigreadr    r=   r!   r"   r#   r$   r1   r2   appadd_middlewareoauth2_schemer)   r;   r7   rA   rK   postr   getr}   r   __name__runr'   r'   r'   r(   <module>   sF    

	1|