
    i$              
       ,   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ  e       Z e       Ze	j                  j!                  dd      Zd	ed
efdZdeded
ee   fdZdedededed
ef
dZdee   dee   d
ee   fdZd
efdZd
efdZy)    N)List)Console)Prompt)config_manager
os_manager)TVShowManager
OUT_FOLDERmap_episode_name
number_strreturnc           	      6   	 d| v r| S t        |       }|dk  rt        t        |            dz   }nt        t        |            }t        |      j                  |      S # t        $ r1}t        j                  d|  dt        |       d       | cY d}~S d}~ww xY w)a^  
    Formats an episode number string, intelligently handling both integer and decimal episode numbers.
    
    Parameters:
        - number_str (str): The episode number as a string, which may contain integers or decimals.
    
    Returns:
        - str: The formatted episode number string, with appropriate handling based on the input type.
    .
      z!Could not format episode number 'z': z. Using original format.N)intlenstrzfill	Exceptionloggingwarning)r   nwidthes       i/home/nidran/Documenti/script/streaming-community/StreamingCommunity/services/_base/tv_display_manager.pydynamic_format_numberr      s    *
Or6AK!OEAKE1v||E"" ;J<s3q6(Rjkls#   A AA 	B'&BBB
cmd_insert	max_countc                 N   	 g }| j                         r|j                  t        |              	 |S d| v rp	 t        t        j
                  | j                  d            \  }}t        |      }|j                         rt        |      n|}t        t        ||dz               }	 |S | dk(  rt        t        d|dz               }	 |S | j                         dv r*t        j                  d       t        j                  d       t        j!                  d      } # t        $ r Y "w xY w)a	  
    Manage user selection for seasons or episodes to download.

    Parameters:
        - cmd_insert (str): User input for selection.
        - max_count (int): Maximum count available.

    Returns:
        list_selection (List[int]): List of selected items.
    -r   *qquit
[red]Quit ...r   z0[red]Invalid input. Please enter a valid command)	isnumericappendr   mapr   stripsplitlistrange
ValueErrorlowerconsoleprintsysexitmsgask)r   r   list_selectionstartends        r   manage_selectionr8   4   s     !!!#j/20 + J J,<,<S,AB
sE
"%--/c#hy!%eE37&;!<  3!%9q="9:N  =0MM+,HHQKWWOP
9    s   A,D 	D$#D$tv_namenumber_seasonepisode_numberepisode_namec                    t         }| %|j                  dt        j                  |             }||j                  dt	        |            }n$|j                  dt        t	        d                  }|%|j                  dt        t	        |                  }n$|j                  dt        t	        d                  }|%|j                  dt        j                  |            }|S )aL  
    Maps the episode title to a specific format.

    Parameters:
        tv_name (str): The name of the TV show.
        number_season (int): The season number.
        episode_number (int): The episode number.
        episode_name (str): The original name of the episode.

    Returns:
        str: The mapped episode title.
    z
%(tv_name)z	%(season)r   z
%(episode)z%(episode_name))MAP_EPISODEreplacer   get_sanitize_filer   r   )r9   r:   r;   r<   map_episode_temps        r   map_episode_titlerB   `   s     #+33L*B^B^_fBgh +33K]AST+33KAVWZ[\W]A^_!+33LBWX[\jXkBlm+33LBWX[\]X^B_`+334EzGcGcdpGqr    list_season_selectavailable_seasonsc           
         	 	 | D cg c]	  }||v s| }}|s_t         j                  ddj                  t        t        |             d      }t        t        t        |j                  d                  } w|S c c}w # t        $ rl t        j                  d       t        ddj                  t        t        |             d      }t        t        t        |j                  d                  } Y nw xY w)aJ  
    Validates and adjusts the selected seasons based on the available seasons.

    Parameters:
        - list_season_select (List[int]): List of seasons selected by the user.
        - available_seasons (List[int]): List of available season numbers.

    Returns:
        - List[int]: Adjusted list of valid season numbers.
    z![red]Enter valid season numbers (z, ),z7Error: Please enter valid integers separated by commas.zEnter valid season numbers (z): )r3   r4   joinr(   r   r+   r   r*   r-   r   errorinput)rD   rE   seasonvalid_seasonsinput_seasonss        r   validate_selectionrO      s     	J 3EdRcHcVdMd ! #*KDIIVYZ]_pVqLrKsst(u v%)#c=3F3Fs3K*L%M"   e  	JMMST "$@3sTeKfAg@hhk"lmM!%c#}/B/B3/G&H!I	J s.   A? 	A:A:A"A? 8A? :A? ?A2C43C4c                    t        | j                        dk(  ryt               }	 t        | j                  d   d      xrB | j                  d   j                  duxr% t        | j                  d   j                        dk7  }t        | j                  d   d      xrB | j                  d   j                  duxr% t        | j                  d   j                        dk7  }d	d
id	did}|rd	di|d<   |rd	di|d<   |j                  |       t        | j                        D ]  \  }}t        |d      r|j                  nd}t        |dz         |d}|rt        |d      r|j                  nd}	|	|d<   |rt        |d      r|j                  nd}
|
|d<   |j                  |        |j                         }|dv r*t        j                  d       t        j                   d       |S # t        $ r d}d}Y w xY w)z
    Display seasons list and handle user input.

    Parameters:
        - seasons_manager: Manager object containing seasons information.

    Returns:
        last_command (str): Last command entered by the user.
    r   1r   typeN idFcolorredyellowIndexNamemagentaTypecyanIDnamezN/Ar"   r%   )r   seasonsr   hasattrrR   r   rT   
IndexError
add_column	enumerater_   add_tv_showrunr/   r0   r1   r2   )seasons_managertable_show_managerhas_typehas_idcolumn_infoirL   season_nameseason_infoseason_type	season_idlast_commands               r   display_seasons_listrr      so    ?""#q( '?2215v>  `OD[D[\]D^DcDclpCp  `ux  zI  zQ  zQ  RS  zT  zY  zY  vZ  ^`  v`003T:  X@W@WXY@Z@]@]fj?j  Xor  tC  tK  tK  LM  tN  tQ  tQ  pR  VX  pX 5!(#K
 &	2F$f-D!!+. 667 4	6%,VV%<fkk%QZ
 )0)@&++eK"-K%,VT%:		I )K&&{3!4& &))+L}$'(Y  s   B:G& &G76G7c                    t               }d}d}| D ]  }t        |t              r|j                  d      nt	        |dd      }t        |t              r|j                  d      nt	        |dd      }|t        |      j                         dk7  rd}|t        |      j                         dk7  sd} ddd	ii}dd
i|d<   |rddi|d<   |rddi|d<   |j                  |       t        |       D ]  \  }}t        |t              r|j                  d      nt	        |dd      }	t        |t              r|j                  d      nt	        |dd      }t        |t              r|j                  d      nt	        |dd      }t        |dz         |	d}
|r||
d<   |r||
d<   |j                  |
        |j                         }|dv r*t        j                  d       t        j                  d       |S )z
    Display episodes list and handle user input.

    Returns:
        last_command (str): Last command entered by the user.
    FcategoryNdurationrS   TrY   rU   rV   r[   rZ   greenCategoryblueDurationr_   r   rX   r"   r%   r   )r   
isinstancedictgetgetattrr   r)   rc   rd   re   rf   r/   r0   r1   r2   )episodes_managerrh   has_categoryhas_durationmediart   ru   rk   rl   r_   episode_inforq   s               r   display_episodes_listr      s    ' LL!  ,6ud,C599Z(QVXbdhIi,6ud,C599Z(QVXbdhIiCM$7$7$9R$?LCM$7$7$9R$?L  	'5!K #I.K#*G"4J#*F"3J!!+. ./ 55$.ud$;uyy PVX\A],6ud,C599Z(QVXbdhIi,6ud,C599Z(QVXbdhIi QZ
 '/L$'/L$&&|45$ &))+L}$'(rC   )r1   r   typingr   rich.consoler   rich.promptr   StreamingCommunity.utilsr   r    StreamingCommunity.utils.consoler   r3   r/   configr|   r>   r   r   r   r8   rB   rO   rr   r    rC   r   <module>r      s       !  @ : h
)##''6HIc c 8) ) )c )Xs 3  [^ cf DJ49 Jc JW[\_W` JB@S @F?s ?rC   