U
    mh'                     @   s   d dl mZ d dlmZ d dlmZ d dlmZ G dd deZG dd deZ	G d	d
 d
eZ
G dd deZG dd deZG dd deZdS )    )models)get_user_model)timezone)	BaseModelc                   @   sf   e Zd ZdZejddZejdddZejddZ	ejdd	d
Z
ejddZG dd dZdd ZdS )ChannelZonez*Geographic zones for channel broadcasting.   
max_length
   T)r	   uniqueblank2   UTC)r	   defaultr   c                   @   s   e Zd ZdZdgZdS )zChannelZone.MetaZchannel_zonesnameN__name__
__module____qualname__db_tableordering r   r   0/var/www/html/Adtlas/src/apps/channels/models.pyMeta   s   r   c                 C   s   | j  d| j dS N ())r   codeselfr   r   r   __str__   s    zChannelZone.__str__N)r   r   r   __doc__r   	CharFieldr   r   	TextFielddescriptionr   BooleanField	is_activer   r"   r   r   r   r   r      s   r   c                   @   sv   e Zd ZdZejddZejddZejddZejdddZ	ej
dd	Zejd
ddddZG dd dZdd ZdS )ChannelCodecz.Video/Audio codec configurations for channels.d   r   r      Tr	   r   zBitrate in kbps	help_text      )
max_digitsdecimal_placesnullr   c                   @   s   e Zd ZdZdgZdS )zChannelCodec.MetaZchannel_codecsr   Nr   r   r   r   r   r       s   r   c                 C   s   | j  d| j d| j dS )Nr   /r   )r   video_codecaudio_codecr    r   r   r   r"   $   s    zChannelCodec.__str__N)r   r   r   r#   r   r$   r   r5   r6   
resolutionPositiveIntegerFieldbitrateDecimalFieldZ
frame_rater   r"   r   r   r   r   r)      s   r)   c                   @   sr  e Zd ZdZddddgZdddd	gZejd
dZejd
ddZ	ej
dddZejdeddZejdeddZejddZejddZejeejdddZejeejdddZejddddZejddZejddZejdddZejdddZejdddZejdddZ ej
dddZ!ej
dddZ"ej#dddZ$ejddZ%G d d! d!Z&d"d# Z'e(d$d% Z)d)d&d'Z*d(S )*ChannelzTV Channel model.)tvZ
Television)radioZRadio)	streamingZ	Streaming)ZottzOver-the-Top)activeActive)inactiveInactiveZmaintenanceZMaintenance)ZtestingZTestingr   r   Tr,   r3   r   r+   r<   r	   choicesr   r?   r   )	on_deleter3   r   zchannels/logos/)	upload_tor   r3   r   r*   zDynamic Ad Insertion supportr   r.      z$Maximum ad break duration in secondsi,  z"Minimum gap between ads in secondsr   c                   @   s    e Zd ZdZddgZddgZdS )zChannel.Metachannelschannel_numberr   zoneN)r   r   r   r   r   unique_togetherr   r   r   r   r   W   s   r   c                 C   s*   | j r| j  d| jp| j S | jp(| jS )Nz. )rL   display_namer   r    r   r   r   r"   \   s    zChannel.__str__c                 C   s   | j dko| jS )Nr?   )status	is_onliner    r   r   r   r(   a   s    zChannel.is_activec                 C   s$   || _ t | _| jddgd dS )zUpdate channel health status.rQ   last_health_checkupdate_fieldsN)rQ   r   nowrR   save)r!   rQ   r   r   r   update_health_statuse   s    
zChannel.update_health_statusN)T)+r   r   r   r#   ZCHANNEL_TYPESSTATUS_CHOICESr   r$   r   rO   r8   rL   Zchannel_typerP   URLFieldZ
stream_urlZbackup_stream_url
ForeignKeyr)   SET_NULLcodecr   rM   
ImageFieldlogor%   r&   websitelanguagecategoryZtarget_audiencer'   Zsupports_daiZmax_ad_durationZ
min_ad_gapDateTimeFieldrR   rQ   r   r"   propertyr(   rW   r   r   r   r   r;   (   sH   
r;   c                	   @   s  e Zd ZdZdddddddd	d
g	ZejeejddZ	ej
ddZejddZej
deddZe Ze ZejddZejdddZejdddZejdddZej
dddZej
dddZejddZejddZejeddZG dd dZ dd  Z!e"d!d" Z#d#d$ Z$d%S )&
EPGProgramz!Electronic Program Guide entries.)ZmovieZMovie)Zseriesz	TV Series)newsZNews)ZsportsZSports)ZdocumentaryZDocumentary)ZentertainmentZEntertainment)ZkidsZKids)ZmusicZMusic)otherOtherZprogramsrG   related_namer   r   Tr   r+   rf   rE   zDuration in minutesr-   rD   r
   r,   r   Fr   r   r   c                   @   s8   e Zd ZdZddgZejddgdejddgdgZdS )zEPGProgram.MetaZepg_programschannel
start_time)fieldsend_timeN)r   r   r   r   r   r   Indexindexesr   r   r   r   r      s
   r   c                 C   s   | j  d| jj d| j S )N on z at )titlerk   r   rl   r    r   r   r   r"      s    zEPGProgram.__str__c                 C   s$   t  }| j|  ko| jkS   S N)r   rU   rl   rn   r!   rU   r   r   r   is_currently_airing   s    zEPGProgram.is_currently_airingc                 C   s2   | j s
g S | js,| jd }d|d |d gS | jS )z)Get available ad insertion opportunities.<   r   r0      )has_ad_breaksad_break_positionsduration)r!   Zduration_secondsr   r   r   get_ad_opportunities   s    
zEPGProgram.get_ad_opportunitiesN)%r   r   r   r#   ZPROGRAM_TYPESr   rZ   r;   CASCADErk   r$   rr   r%   r&   Zprogram_typerb   rl   rn   r8   rz   Zseason_numberZepisode_number	DateFieldZoriginal_air_dateZcontent_ratingr`   r'   Zsubtitles_availablerx   	JSONFieldlistry   r   r"   rc   ru   r{   r   r   r   r   rd   l   s>   
rd   c                   @   s   e Zd ZdZdddddgZejeejddZ	ej
d	d
Zej
dedZejddZejddZejddZejdddZejdddZejdddZejeddZejddZejdddZG dd dZdd Zdd Zdd  Z d!S )"Jinglez Channel jingles and station IDs.)Z
station_idz
Station ID)ZbumperZBumper)ZpromoZPromo)Z
transitionZ
Transition)Zcommercial_breakzCommercial Breakjinglesrh   r   r   r+   )r	   rF   zjingles/)rH   zDuration in secondsr-   Tr      zHigher number = higher priorityrI   rD   rj   r   c                   @   s   e Zd ZdZdddgZdS )zJingle.Metar   rk   z	-priorityr   Nr   r   r   r   r   r      s   r   c                 C   s   | j  d| jj  dS r   )r   rk   r    r   r   r   r"      s    zJingle.__str__c                 C   s   | j s
dS t }| jr*| | jk r*dS | jrB| | jkrBdS | jr| }| jD ]N}tj	|d d }tj	|d d }||  kr|krVn qV dS qVdS dS )z.Check if jingle can be played at current time.Fstartz%H:%MendT)
r(   r   rU   
start_datedateend_date
time_slotstimedatetimestrptime)r!   rU   Zcurrent_timeslotrl   rn   r   r   r   can_play_now   s     
zJingle.can_play_nowc                 C   s,   |  j d7  _ t | _| jddgd dS )zMark jingle as played.r   
play_countlast_playedrS   N)r   r   rU   r   rV   r    r   r   r   mark_played   s    
zJingle.mark_playedN)!r   r   r   r#   ZJINGLE_TYPESr   rZ   r;   r|   rk   r$   r   Zjingle_type	FileFieldfiler8   rz   r'   r(   priorityr}   r   r   r~   r   r   r   rb   r   r   r"   r   r   r   r   r   r   r      s.   r   c                   @   s   e Zd ZdZddddgZejeejddZ	ej
dd	Zej
d
eddZe Ze ZejddZejddZejddZejddZejdddZejddZG dd dZdd Zedd ZdS )ChannelSchedulezChannel broadcasting schedule.)regularzRegular Programming)specialzSpecial EventrC   )testzTest Broadcast	schedulesrh   r   r   r+   r   rE   Tr   r   x   zAd break duration in secondsrI   c                   @   s   e Zd ZdZddgZdS )zChannelSchedule.MetaZchannel_schedulesrk   rl   Nr   r   r   r   r   r     s   r   c                 C   s   | j  d| jj S )Nrq   )rr   rk   r   r    r   r   r   r"     s    zChannelSchedule.__str__c                 C   s*   t  }| jo(| j|  ko$| jkS   S rs   )r   rU   r(   rl   rn   rt   r   r   r   is_currently_active  s    z#ChannelSchedule.is_currently_activeN)r   r   r   r#   ZSCHEDULE_TYPESr   rZ   r;   r|   rk   r$   rr   Zschedule_typerb   rl   rn   r%   r&   rY   Zcontent_urlZbackup_content_urlr'   Z	allow_adsr8   Zad_break_durationr(   r   r"   rc   r   r   r   r   r   r      s*   r   N)	django.dbr   django.contrib.authr   django.utilsr   apps.common.modelsr   r   r)   r;   rd   r   r   r   r   r   r   <module>   s   DCE