U
    }‡hL  ã                   @   sb   d dl Z d dlmZ d dlmZ G dd„ dƒZG dd„ dƒZddd„Zdd„ Zdd„ Z	dd„ Z
dS )é    N)Útimezone)Úslugifyc                   @   s   e Zd Zdd„ ZdS )ÚNoVastResultc                 C   s   || _ || _t|ƒ| _d S ©N©Úid_campaignÚ	total_adsÚintÚtotal_impressions©Úselfr   r   r
   © r   ú//var/www/html/Focus/src/apps/campaigns/utils.pyÚ__init__	   s    zNoVastResult.__init__N©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd„ ZdS )Ú
VastResultc                 C   s   || _ || _t|ƒ| _d S r   r   r   r   r   r   r      s    zVastResult.__init__Nr   r   r   r   r   r      s   r   çš™™™™™Ù?çš™™™™™É?ç333333Ó?çš™™™™™¹?c                 C   s$   ||  |d|   ||  ||  S )a  
    Calculate the priority score for a campaign.
    
    Args:
    - TSA (float): Target Show Alignment value (between 0 and 1).
    - ARF (float): Airing Requirement Fulfillment value (between 0 and 1).
    - U (float): Urgency value (between 0 and 1).
    - P (float): Position value (between 0 and 1).
    - W_TSA (float): Weight for Target Show Alignment (default is 0.4).
    - W_ARF (float): Weight for Airing Requirement Fulfillment (default is 0.2).
    - W_U (float): Weight for Urgency (default is 0.3).
    - W_P (float): Weight for Position (default is 0.1).
    
    Returns:
    - float: Priority score for the campaign.
    é   r   )ZTSAZARFÚUÚPZW_TSAZW_ARFZW_UZW_Pr   r   r   Úcalculate_priority_score   s    r   c                 C   s8   t t|  d¡ƒ\}}}}|d |d  | |d  }|S )Nú:i  é<   i@B )Úmapr	   Úsplit)Ztime_strÚhoursÚminutesÚsecondsÚmicrosecondsÚtotal_secondsr   r   r   Úhhmmssf_to_seconds*   s    r&   c                 C   sø   t j |¡\}}t|ƒ› dt ¡  d¡› |› }dg}| | jrT| jj	rTt| jj	ƒnd¡ | | j
r„t| j
dƒr„| j
j	r„t| j
j	ƒnd¡ | | jr´t| jdƒr´| jj	r´t| jj	ƒnd¡ | t ¡  d¡t ¡  d	¡g¡ | d
¡ t jj||fžŽ S )z÷
    Generate upload path for original files based on channel, brand, and campaign.
    Path format: adspots/original/{channel_name}/{brand_name}/{campaign_name}/{filename}
    Falls back to default structure if any related object is missing.
    Ú_ú%Y%m%d_%H%M%SÚadspotsú
no-channelÚnameúno-brandúno-campaignú%Yú%mÚoriginal©ÚosÚpathÚsplitextr   r   ÚnowÚstrftimeÚappendÚchannelr+   ÚbrandÚhasattrÚcampaignÚextendÚjoin©ÚinstanceÚfilenamer+   ÚextZsafe_filenameÚ
path_partsr   r   r   Úget_original_file_upload_path4   s     $00"
rC   c                 C   sø   t j |¡\}}t|ƒ› dt ¡  d¡› |› }dg}| | jrT| jj	rTt| jj	ƒnd¡ | | j
r„t| j
dƒr„| j
j	r„t| j
j	ƒnd¡ | | jr´t| jdƒr´| jj	r´t| jj	ƒnd¡ | t ¡  d¡t ¡  d	¡g¡ | d
¡ t jj||fžŽ S )z°
    Generate upload path for encoded files, mirroring the original file structure.
    Path format: adspots/encoded/{channel_name}/{brand_name}/{campaign_name}/{filename}
    r'   r(   r)   r*   r+   r,   r-   r.   r/   Úencodedr1   r>   r   r   r   Úget_encoded_file_upload_pathN   s     $00"
rE   )r   r   r   r   )r2   Údjango.utilsr   Údjango.utils.textr   r   r   r   r&   rC   rE   r   r   r   r   Ú<module>   s   

