§
   (|®4:§4ã                   óH   — d Z ddlZddlZddlZddlmZ  G d„ d¦  «        ZdS )uë   
ChannelNameGenerator - AutomatickÃ© generovÃ¡nÃ­ nÃ¡zvÅ¯ kanÃ¡lÅ¯ podle Å¾Ã¡nrÅ¯.

Podporuje dvÄ› varianty:
1. NÃ¡hodnÃ½ vÃ½bÄ›r z pÅ™eddefinovanÃ½ch kreativnÃ­ch nÃ¡zvÅ¯ podle dominantnÃ­ho Å¾Ã¡nru
2. AI generovÃ¡nÃ­ pomocÃ­ LLM API
é    N)Ú
AIProviderc                   ó”  — e Zd ZdZi dg d¢“dg d¢“dg d¢“dg d	¢“d
g d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“d g d!¢“Zg d"¢Zi dd#“dd$“dd%“dd&“d
d'“dd(“dd)“dd*“dd+“d,d-“dd.“dd/“dd0“dd1“dd2“d d3“Zi d4g d5¢“d6g d7¢“dg d8¢“dg d9¢“dg d:¢“d
g d;¢“dg d<¢“dg d=¢“d>g d?¢“d@g dA¢“dBg dC¢“dDg dE¢“dg dF¢“dGg dH¢“dIg dJ¢“dKg dL¢“dMg dN¢“g dO¢g dP¢dQœ¥Zg dR¢Zi d4d#“d6dS“dd$“dd%“dd&“d
d'“dd(“dd)“d>dT“d@dU“dBdV“dDdW“dd+“dGdX“dId/“dKdY“dMdZ“d2d3dQœ¥Z	ddd\„Z
ded^„Zdfd_„Zd`„ Zdeda„Zdedb„Zdedc„Zd[S )gÚChannelNameGeneratorz£
    Generator kreativnich nazvu kanalu/kin podle zanru.
    
    Podporuje dva typy:
    - 'tv': MyTV kanaly se serialy
    - 'cinema': MyCinema kina s filmy
    i*  )
u
   AdrenalÃ­nu   AkÄ�nÃ­ jÃ­zdaõ
   PlnÃ½ plynõ   Na ostÅ™Ã­ noÅ¾eõ   NebezpeÄ�nÃ¡ zÃ³naÚHrdinskyzV akciu   NapÄ›tÃ­ na maximumz
Bez limituu   VÃ½zva pÅ™ijataé   )
u
   AnimÃ¡Ä�eku   KreslenÃ© svÄ›tyu   BarevnÃ© pÅ™Ã­bÄ›hyõ   AnimovanÃ¡ magieu   PohÃ¡dkovÃ½ svÄ›tzKresba a fantazieõ   Å½ivÃ© kresbyu   AnimovanÃ© dobrodruÅ¾stvÃ­u   SvÄ›t animaceu   KouzelnÃ¡ tuÅ¾kaé#   )
õ   SmÃ­chovõ   DobrÃ¡ nÃ¡ladaõ   ÃšsmÄ›v na rtechõ   VeselÃ© veÄ�eryu   LehkÃ© srdceúHumor bez hranicõ   Salvy smÃ­chuu   KomediÃ¡lnÃ­ mixu	   Ãšlet dneõ   Pro zasmÃ¡nÃ­éP   )
õ   Stopy zloÄ�inuu   NoÄ�nÃ­ hlÃ­dkau   DetektivnÃ­ klubõ   TemnÃ¡ stranau   VyÅ¡etÅ™ovÃ¡nÃ­u   Za mÅ™Ã­Å¾emiu   PolicejnÃ­ staniceu   ZÃ¡kon a spravedlnostu   KriminÃ¡lnÃ­ pÅ™Ã­bÄ›hyu   StÃ­n podezÅ™enÃ­éc   )
õ   Okno do svÄ›taõ   Pohled zblÃ­zkaõ   SkuteÄ�nÃ© pÅ™Ã­bÄ›hyúZa kulisamiúDokument dneu	   PoznÃ¡nÃ­õ   SvÄ›t kolem nÃ¡súFakta a objevyÚRealitaú	Pod lupoué   )
õ   LidskÃ© osudyõ   Hlubiny emocÃ­õ   Å½ivotnÃ­ pÅ™Ã­bÄ›hyu   Drama veÄ�erõ   SilnÃ© momentyúSrdce na dlaniõ   CitovÃ¡ bouÅ™eu   Osudy lidÃ­õ   Mezi Å™Ã¡dkyõ   PravdivÃ© dramaiÿ)  )
õ   RodinnÃ© veÄ�eryúPro celou rodinuõ   SpoleÄ�nÃ© chvÃ­leõ   RodinnÃ¡ pohodaõ   DomÃ¡cÃ­ kinoúU krbuúGenerace spoluu   RodinnÃ½ Ä�asõ   Pro malÃ© i velkÃ©õ   VÅ¡ichni spolui
*  )
u   DÄ›tskÃ½ svÄ›tu   Pro nejmenÅ¡Ã­u   PohÃ¡dkovÃ½ kouteku   DÄ›tskÃ¡ radostu   MalÃ­ divÃ¡ciu   SvÄ›t dÄ›tÃ­u   VeselÃ© dobrodruÅ¾stvÃ­zPro kluky a holkyu   DÄ›tskÃ½ rÃ¡ju   Å kolÃ¡Ä�eki°%  )
õ   ZÃ¡hadnÃ© pÅ™Ã­bÄ›hyÚTajemnoõ   NeznÃ¡mÃ© teritoriumõ
   MystÃ©riumõ   SkrytÃ© pravdyõ   Za zÃ¡vojemõ   NevysvÄ›tlitelnÃ©õ   TemnÃ© tajemstvÃ­ÚEnigmau   HÃ¡danka dnei*  )
Ú	Zpravodaju
   AktuÃ¡lnÄ›u	   Ze svÄ›tau   DennÃ­ pÅ™ehledu   Info kanÃ¡lu   UdÃ¡losti dneÚNovinkyu
   ZprÃ¡vy 24ÚReportu   AktuÃ¡lnÃ­ dÄ›nÃ­i*  )
u   SkuteÄ�nÃ½ Å¾ivotz
Reality TVu   Bez scÃ©nÃ¡Å™eu   Pravda a nic neÅ¾ pravdaz
Za kamerouu   AutentickÃ© pÅ™Ã­bÄ›hyzRealita showu   Bez pÅ™Ã­pravyu   Å½ivÄ›u   NepÅ™edvÃ­datelnÃ©i*  )
úZa horizontemõ   Budoucnost volÃ¡õ   JinÃ© svÄ›tyu   Fantazie a vÄ›daõ   VesmÃ­rnÃ¡ odyseaõ   PortÃ¡l do neznÃ¡maú	Dimenze XzMagie a technologieõ   NadpÅ™irozenozSci-Fi klubi*  )
õ   SrdcovÃ© zÃ¡leÅ¾itostiu   DennÃ­ dramau   LÃ¡ska a intrikyu   SeriÃ¡lovÃ© odpoledneu   Osudy hrdinÅ¯zEmoce non-stopu   RodinnÃ© vztahyu   PÅ™Ã­bÄ›hy bez koncezSrdce v plamenechzTouhy a snyi*  )
Ú	Rozhovoryu   Na slovÃ­Ä�kou   Talk show veÄ�eru   HostÃ© veÄ�erau   DebatnÃ­ klubu   Na kÃ¡vÄ› s...Ú	Interviewu   PovÃ­dÃ¡nÃ­u
   OtevÅ™enÄ›zFace to facei*  )
õ   VÃ¡leÄ�nÃ© pÅ™Ã­bÄ›hyu   PolitickÃ¡ arÃ©naõ   ZÃ¡kopy historieu   Moc a vÃ¡lkaõ   BojovÃ© poleõ   HistorickÃ© konfliktyú
Za frontouu   PolitickÃ© dramaõ   SvÄ›t ve vÃ¡lceú	Boj o mocé%   )
õ   DivokÃ½ zÃ¡padõ   KovbojskÃ© pÅ™Ã­bÄ›hyÚPrairieu   WesternovÃ½ klubõ   Pod Å¾hnoucÃ­m sluncemõ   RevolverovÃ­ hrdinovÃ©õ   PouÅ¡tnÃ­ stopyõ   ZÃ¡pad slunceõ   Å erifova hvÄ›zdaõ   Cesta na zÃ¡pad)
u   VeÄ�ernÃ­ programu   MÅ¯j mixõ   Televize pro mÄ›u
   OblÃ­benÃ©ú
Moje volbau   SeriÃ¡lovÃ½ veÄ�eru
   Bez nÃ¡zvuu   NovÃ½ kanÃ¡lu   KanÃ¡l dle vÃ½bÄ›ruzMix dneÚAkceu
   AnimovanÃ½ÚKomedieÚKrimiÚDokumentÚDramau   RodinnÃ½u   DÄ›tskÃ½u   ZÃ¡hadyén   u   ZprÃ¡vyÚRealityzSci-FiÚ
Telenovelaz	Talk Showu
   VÃ¡leÄ�nÃ½ÚWesterné   )
u   Akce bez kompromisÅ¯ÚAdrenalinovkau   BojovÃ© scÃ©nyu   HrdinovÃ© v akciu   Exploze a honiÄ�kyu   MÃ­sto Ä�inur   u   AkÄ�nÃ­ maratonzBez milostir   é   )
u   DobrodruÅ¾nÃ© vÃ½pravyr@   u   NeznÃ¡mÃ¡ zemÄ›u   ObjevitelÃ©u   VelkÃ¡ cestaÚExpedicezZa poklademu   DobrodruÅ¾nÃ¡ jÃ­zdau   NovÃ½ svÄ›tu   VÃ½pravy za sluncem)
r   Ú	Kreslenkyu   BarevnÃ© svÄ›tyr   u   AnimovanÃ½ senu   PohÃ¡dkovÃ½ filmu   PixelovÃ¡ zÃ¡bavau   Animace pro vÅ¡echnyu   KouzelnÃ½ svÄ›tu   TuÅ¾ka a fantazie)
r   r   r   r   u   KomediÃ¡lnÃ­ maratonr   r   u   Ãšlet filmur   u   LehkÃ½ film)
r   u   ZloÄ�in a trestr   ÚMafieu   OrganizovanÃ½ zloÄ�inu   SvÄ›t podsvÄ›tÃ­Ú
Gangsterkyu   NoÄ�nÃ­ mÃ­stou   ZloÄ�ineckÃ© osudyu   Bez zÃ¡kona)
r   r   r   r   r   r    r!   r   r   u   PoznÃ¡vacÃ­ film)
r#   r$   r%   r&   u   Drama veÄ�erar'   r(   r)   r*   u   EmoÄ�nÃ­ film)
r,   r+   r-   r.   r/   r0   r1   r2   r3   u   RodinnÃ½ filmé   )
u   KouzelnÃ© svÄ›tyzFantasy maratonu   Magie a meÄ�rB   rD   rF   u   MytickÃ© pÅ™Ã­bÄ›hyu   SvÄ›t fantazieu   ZakletÃ© kinou   Legendy oÅ¾Ã­vajÃ­é$   )
u   HistorickÃ© Ã³dyzZ minulostiu   VelkÃ© dÄ›jinyÚEpochyu   Kronika dÄ›jinu   StarovÄ›kÃ© pÅ™Ã­bÄ›hyu   HistorickÃ½ maratonu   Minulost oÅ¾Ã­vÃ¡u   DÄ›jinnÃ© momentyu   ÄŒas krÃ¡lÅ¯é   )
u   HrÅ¯zostraÅ¡nÃ© kinou   NoÄ�nÃ­ mÅ¯ryu   TemnÃ© stÃ­nyu   Strach v oÄ�Ã­chu   Krev a dÄ›syu   HororovÃ¡ nocu   NesestÅ™Ã­hanÃ© filmyu   ParanormÃ¡lnÃ­u   Zlo Ä�Ã­hajÃ­cÃ­zPeklo v kinei¢(  )
u   HudebnÃ­ filmyzMelodie kinau   HudebnÃ­ scÃ©nyu   KoncertnÃ­ sÃ¡lzRytmus v obrazeu   ZpÃ­vÃ¡nÃ­ pod hvÄ›zdamiu   MuzikÃ¡lovÃ© veÄ�eryu   Tance a pÃ­snÄ›u   HudebnÃ­ magiez
Zvuk filmu)
r4   r5   r6   r7   r8   r9   r:   r;   r<   u   HÃ¡danka veÄ�eraiý)  )
u   RomantickÃ© veÄ�eryu   LÃ¡ska na plÃ¡tnÄ›rG   u   RomantickÃ¡ komedieu   LÃ¡sky pÅ™Ã­bÄ›hu   Pro zamilovanÃ©u   ValentÃ½nskÃ© kinou   SvÄ›t lÃ¡skyu   RomantickÃ½ maratonu   Polibky na plÃ¡tnÄ›in  )
r@   rA   rB   rC   zSci-Fi maratonu   GalaktickÃ© kinoz
Techno snyu   KosmickÃ¡ staniceu   FuturistickÃ© vizerE   i*  )
u   TeleviznÃ­ filmr/   u   VeÄ�ernÃ­ filmr[   u   FilmovÃ½ vecerz
Prima filmu   DomÃ¡cÃ­ projekceu   TV premiÃ©rau   VeÄ�ernÃ­ pohodau   DomÃ¡cÃ­ filmyé5   )	u   NapÄ›tÃ­ do poslednÃ­ chvÃ­leu   ThrillerovÃ¡ nocr   u   SrÃ¡Å¾ejÃ­cÃ­ dechu   NapÃ­navÃ½ veÄ�eru   Adrenalin v Å¾ilÃ¡chr   r;   u
   Bez Ãºniku)
rJ   rK   rL   rN   rO   u   HrdinovÃ© vÃ¡lkyu   VÃ¡leÄ�nÃ½ eposrP   rM   zDen D)
rR   rS   u   PrÃ©rieu   WesternovÃ½ maratonrU   rV   rW   rX   rY   rZ   )i *  rQ   )
z	Moje kinou   FilmovÃ½ veÄ�eru   FilmovÃ½ maratonu   OblÃ­benÃ© filmyr\   u   VeÄ�ernÃ­ projekceu
   NovÃ© kinou   FilmovÃ½ mixzProjekce dneu   Kino pro mÄ›u   DobrodruÅ¾nÃ½ÚFantasyu   HistorickÃ½ÚHororu   HudebnÃ­u   RomantickÃ½zTV FilmÚThrillerNc                 ó:   — |pt          j        ¦   «         | _        dS )z�
        Initialize the generator.
        
        Args:
            addon: xbmcaddon.Addon instance (optional, needed for AI mode)
        N)Ú	xbmcaddonÚAddonÚaddon)Úselfrx   s     úi/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/ChannelNameGenerator.pyÚ__init__zChannelNameGenerator.__init__å   s   € ð Ð/�iœoÑ/Ô/ˆŒ
ˆ
ˆ
ó    Útvc                 óÜ  — |dk    rdnd}|dk    r| j         n| j        }|dk    r| j        n| j        }|dk    r| j        n| j        }t          j        |› d|rt          |¦  «        nd› d�t          j	        ¦  «         |s:t          j        |¦  «        }t          j        |› d|› �t          j	        ¦  «         |S i }|D ]c}	|	                     d¦  «        p|	                     d	d
¦  «        }
|                      |	¦  «        }|D ]}|                     |d¦  «        dz   ||<   ŒŒd|s:t          j        |¦  «        }t          j        |› d|› �t          j	        ¦  «         |S t          |                     ¦   «         d„ d¬¦  «        }|d         d         }|                     |d|› �¦  «        }t          |¦  «        dk    rv|d         d         }|d         d         }|d         d         }||dz  k    rC||k    r=|                      |||¦  «        }t          j        |› d|› �t          j	        ¦  «         |S |                      ||¦  «        }t          j        |› d|› �t          j	        ¦  «         |S )a‰  
        Generate channel/cinema name based on dominant genres from media list.
        
        Uses random selection from predefined creative names.
        
        Args:
            media_list: List of media dicts with 'genre_ids' or 'genres' field
            media_type: 'tv' for MyTV channels, 'cinema' for MyCinema
            
        Returns:
            str: Generated name
        Úcinemaú
[MyCinema]ú[MyTV]z" generate_from_genres called with r   z itemsz No items, using fallback: ÚnameÚtitleÚUnknowné   z" No genres found, using fallback: c                 ó   — | d         S )Nr…   © )Úxs    rz   ú<lambda>z;ChannelNameGenerator.generate_from_genres.<locals>.<lambda>  s
   € À1ÀQÄ4€ r|   T)ÚkeyÚreversezID:g      à?z Using combined name: z Using single genre name: )ÚCINEMA_FALLBACK_NAMESÚFALLBACK_NAMESÚCINEMA_GENRE_NAMESÚGENRE_NAMESÚCINEMA_GENRE_SHORT_NAMESÚGENRE_SHORT_NAMESÚxbmcÚlogÚlenÚLOGINFOÚrandomÚchoiceÚgetÚ_extract_genre_idsÚsortedÚitemsÚ_generate_combined_nameÚ_generate_single_genre_name)ry   Ú
media_listÚ
media_typeÚ
log_prefixÚfallback_namesÚgenre_names_mapÚgenre_short_namesÚfallbackÚgenre_countsÚitemÚ	item_nameÚ	genre_idsÚgidÚsorted_genresÚtop_genre_idÚtop_genre_nameÚsecond_genre_idÚsecond_countÚ	top_countÚcombined_nameÚsingle_names                        rz   Úgenerate_from_genresz)ChannelNameGenerator.generate_from_genresî   sÙ  € ð &0°8Ò%;Ð%;�\�\Àˆ
Ø7AÀXÒ7MÐ7M˜Ô3Ð3ÐSWÔSfˆØ5?À8Ò5KÐ5K˜$Ô1Ð1ÐQUÔQaˆØ=GÈ8Ò=SÐ=S˜DÔ9Ð9ÐY]ÔYoÐåŒ�JÐnÐnÐU_ÐBfÅ#ÀjÁ/Ä/À/ÐefÐnÐnÐnÕptÔp|Ñ}Ô}Ð}àð 	Ý”} ^Ñ4Ô4ˆHÝŒH˜
ÐIÐI¸xÐIÐIÍ4Ì<ÑXÔXÐXØˆOð ˆØð 	Að 	AˆDØŸš Ñ(Ô(ÐH¨D¯HªH°W¸iÑ,HÔ,HˆIØ×/Ò/°Ñ5Ô5ˆIØ ð Að A�Ø$0×$4Ò$4°S¸!Ñ$<Ô$<¸qÑ$@�˜SÑ!Ð!ðAð ð 	Ý”} ^Ñ4Ô4ˆHÝŒH˜
ÐPÐPÀhÐPÐPÕRVÔR^Ñ_Ô_Ð_ØˆOõ ˜|×1Ò1Ñ3Ô3¸¸ÐQUÐVÑVÔVˆð % QÔ'¨Ô*ˆØ*×.Ò.¨|Ð=QÀ<Ð=QÐ=QÑRÔRˆõ ˆ}ÑÔ Ò!Ð!Ø+¨AÔ.¨qÔ1ˆOØ(¨Ô+¨AÔ.ˆLØ% aÔ(¨Ô+ˆIð ˜y¨3™Ò.Ð.°?ÀlÒ3RÐ3RØ $× <Ò <¸\È?Ð\fÑ gÔ g�Ý”˜JÐMÐM¸mÐMÐMÍtÌ|Ñ\Ô\Ð\Ø$Ð$ð ×6Ò6°|ÀZÑPÔPˆÝŒ�JÐGÐG¸+ÐGÐGÍÌÑVÔVÐVØÐr|   c                 ó˜  — |dk    r| j         n| j        }|dk    r| j        n| j        }|st	          j        |¦  «        S 	 g }|D ]|}|                     d¦  «        p|                     dd¦  «        }|                      ||¦  «        }	|r7|	r|                     d|› d|	› d�¦  «         Œd|                     d|› �¦  «         Œ}|st	          j        |¦  «        S |dk    r'dt          d	¦  «         
                    |¦  «        › d
�}
n3d}|rd|› d�}dt          d	¦  «         
                    |¦  «        › d|› d�}
t          ¦   «         }|                     |
|dk    rdnd¬¦  «        \  }}|r~|                     ¦   «                              d¦  «                             ¦   «         }t          |¦  «        dk    r2|r0|dk    rdnd}t          j        |› d|› �t          j        ¦  «         |S |                      ||¦  «        S # t&          $ rB}t          j        d|› �t          j        ¦  «         |                      ||¦  «        cY d}~S d}~ww xY w)aö  
        Generate channel/cinema name using AI/LLM.
        
        Sends media names and genres to AI and asks for creative name.
        
        Args:
            media_list: List of media dicts
            media_type: 'tv' for MyTV channels, 'cinema' for MyCinema
            current_name: Optional current channel name (for regeneration,
                         AI will generate a different name)
            
        Returns:
            str: AI-generated name, or fallback if AI fails
        r   r‚   rƒ   Ú z- z (ú)zÀJsi kreativni copywriter specializujici se na filmovy branding.

Tvym ukolem je vymyslet originalni a zapamatovatelny nazev pro nove soukrome kino. Toto kino bude promitat nasledujici filmy:

é
   aj  

Zamysli se nad tim, co maji tyto filmy spolecneho:
- Jaka je jejich prevladajici atmosfera? (napinava, temna, odlehcena, dramaticka, futuristicka...)
- Jake emoce vyvolavaji? (strach, smich, napeti, dojeti, vzruseni...)
- Jaky typ divaka by si je vybral?
- Jake jsou jejich hlavni zanrove prvky?

Na zaklade teto analyzy vytvor nazev kina, ktery:
- Je v cestine
- Ma maximalne 3 slova
- Vystihuje podstatu a atmosferu nabizeneho obsahu
- Zni profesionalne jako skutecne kino
- Je snadno zapamatovatelny a originalni
- Muze obsahovat slovo "kino" ale nemusi

Odpovez POUZE nazvem kina, nic dalsiho nepridavej.

Nazev:z
Aktualni nazev kanalu je "z%". Vygeneruj JINY nazev, neopakuj ho.z_Vygeneruj kratky cesky nazev televizniho kanalu podle jeho obsahu.

Kanal vysila tyto serialy:
ú
uk  
Pravidla:
- Cesky, max 3 slova
- Nazev MUSI vychazet z obsahu kanalu (zanry, atmosfera, typ serialu)
- Zni jako skutecny televizni kanal

Priklady nazvu pro inspiraci (NEKOPIRUJ je, vytvor vlastni podle obsahu):
"Komedie - Smichov", "Komedie - Dobra nalada", "Komedie - UsmÄ›v na rtech",
"Drama - Lidske osudy", "Drama - Hlubiny emoci", "Drama - Silne momenty",
"Krimi - Stopy zlocinu", "Krimi - Nocni hlidka", "Krimi - Temna strana",
"Sci-Fi - Za horizontem", "Sci-Fi - Jine svety", "Adrenalin", "Vecer plny napeti",
"Rodinne vecery", "Zahadne pribehy", "Akcni jizda", "Animacek"

Odpovez POUZE nazvem kanalu.

Nazev:Úcinema_nameÚchannel_name)Ú
usage_typez"'é   r€   r�   z AI generated name: z-[ChannelNameGenerator] AI generation failed: N)rŒ   r�   r�   r‘   r–   r—   r˜   Ú_extract_genre_namesÚappendÚchrÚjoinr   Úsend_promptÚstripr”   r’   r“   r•   r²   Ú	ExceptionÚLOGERROR)ry   rž   rŸ   Úcurrent_namer¡   r£   Ú
media_infor¦   r‚   ÚgenresÚpromptÚcurrent_name_instructionÚai_providerÚresponseÚusager    Úes                    rz   Úgenerate_from_aiz%ChannelNameGenerator.generate_from_ai,  sù  € ð 8BÀXÒ7MÐ7M˜Ô3Ð3ÐSWÔSfˆØ=GÈ8Ò=SÐ=S˜DÔ9Ð9ÐY]ÔYoÐàð 	1Ý”= Ñ0Ô0Ð0ðW	EàˆJØ"ð 7ð 7�Ø—x’x Ñ'Ô'Ð@¨4¯8ª8°G¸RÑ+@Ô+@�Ø×2Ò2°4¸ÑDÔD�Øð 7Øð 7Ø"×)Ò)Ð*@¨tÐ*@Ð*@°vÐ*@Ð*@Ð*@ÑAÔAÐAÐAà"×)Ò)¨+¨t¨+¨+Ñ6Ô6Ð6øàð 5Ý”} ^Ñ4Ô4Ð4ð ˜XÒ%Ð%ð
õ €R�„‡‚ˆjÑÔð	
ð 
ð 
��ð2 ,.Ð(Øð Qð0QØ'ð0Qð 0Qð 0QÐ,ð
õ €R�„‡‚ˆjÑÔð
ð 
ð ð	
ð 
ð 
�õ, %™,œ,ˆKØ)×5Ò5Ø°JÀ(Ò4JÐ4J = =ÐP^ð 6ñ `ô `‰OˆH�eð ð  à—~’~Ñ'Ô'×-Ò-¨eÑ4Ô4×:Ò:Ñ<Ô<�å�t‘9”9 ’?�? t�?Ø1;¸xÒ1GÐ1G  ÈX�JÝ”H 
ÐFÐFÀÐFÐFÍÌÑUÔUÐUØ�Kð ×,Ò,¨Z¸ÑDÔDÐDøåð 	Eð 	Eð 	EÝŒHÐHÀQÐHÐHÍ$Ì-ÑXÔXÐXØ×,Ò,¨Z¸ÑDÔDÐDÐDÐDÐDÐDÐDøøøøð	Eøøøs,   Á BG= ÃDG= Ç'G= Ç=
I	È7IÈ>I	ÉI	c                 óˆ   — d|v r|d         r|d         S d|v r)|d         }t          |t          ¦  «        rd„ |D ¦   «         S g S )z%Extract genre IDs from a series dict.r¨   rÆ   c                 óŒ   — g | ]A}t          |t          ¦  «        ¯|                     d ¦  «        ¯,|                     d ¦  «        ‘ŒBS )Úid)Ú
isinstanceÚdictr˜   )Ú.0Úgs     rz   ú
<listcomp>z;ChannelNameGenerator._extract_genre_ids.<locals>.<listcomp>¤  sA   € Ð[Ð[Ð[¨µzÀ!ÅTÑ7JÔ7JÐ[ÈqÏuÊuÐUYÉ{Ì{Ð[˜Ÿš˜d™œÐ[Ð[Ð[r|   )rÑ   Úlist)ry   ÚseriesrÆ   s      rz   r™   z'ChannelNameGenerator._extract_genre_idsš  sg   € ð ˜&Ð Ð  V¨KÔ%8Ð Ø˜+Ô&Ð&ð �vÐÐØ˜HÔ%ˆFÝ˜&¥$Ñ'Ô'ð \Ø[Ð[¨VÐ[Ñ[Ô[Ð[àˆ	r|   c                 óð   ‡— |dk    r| j         n| j        Š|                      |¦  «        }|r5ˆfd„|dd…         D ¦   «         }d                     d„ |D ¦   «         ¦  «        S d|v r|d         r|d         S dS )	z.Extract genre names as comma-separated string.r   c                 ó<   •— g | ]}‰                      |d ¦  «        ‘ŒS )r´   )r˜   )rÓ   r©   r£   s     €rz   rÕ   z=ChannelNameGenerator._extract_genre_names.<locals>.<listcomp>®  s*   ø€ ÐMÐMÐM¸Ð&×*Ò*¨3°Ñ3Ô3ÐMÐMÐMr|   Né   z, c                 ó   — g | ]}|¯|‘ŒS r‡   r‡   )rÓ   Úns     rz   rÕ   z=ChannelNameGenerator._extract_genre_names.<locals>.<listcomp>¯  s   € Ð4Ð4Ð4 A°!Ð4˜aÐ4Ð4Ð4r|   Úgenrer´   )r�   r‘   r™   r¿   )ry   ÚmediarŸ   r¨   Únamesr£   s        @rz   r¼   z)ChannelNameGenerator._extract_genre_names¨  s¡   ø€ à=GÈ8Ò=SÐ=S˜DÔ9Ð9ÐY]ÔYoÐà×+Ò+¨EÑ2Ô2ˆ	Øð 	6ØMÐMÐMÐM¸yÈÈ!È¼}ÐMÑMÔMˆEØ—9’9Ð4Ð4¨Ð4Ñ4Ô4Ñ5Ô5Ð5ð �eÐÐ  g¤ÐØ˜”>Ð!àˆrr|   c                 óB  — |dk    r| j         n| j        }|dk    r| j        n| j        }|dk    r| j        n| j        }|                     |d¦  «        }||v r(t          j        ||         ¦  «        }|r|› d|› �}n|}|S t          j        |¦  «        }	|r|› d|	› �}n|	}|S )z•Generate name for a single dominant genre.
        
        Format: "(genre name) - (creative name)"
        Example: "Drama - Lidske osudy"
        r   r´   ú - )	rŽ   r�   r�   r‘   rŒ   r�   r˜   r–   r—   )
ry   Úgenre_idrŸ   r¢   r£   r¡   Ú
genre_nameÚcreative_nameÚ	full_namer¤   s
             rz   r�   z0ChannelNameGenerator._generate_single_genre_name·  sì   € ð 6@À8Ò5KÐ5K˜$Ô1Ð1ÐQUÔQaˆØ=GÈ8Ò=SÐ=S˜DÔ9Ð9ÐY]ÔYoÐØ7AÀXÒ7MÐ7M˜Ô3Ð3ÐSWÔSfˆà&×*Ò*¨8°RÑ8Ô8ˆ
à�Ð&Ð&Ý"œM¨/¸(Ô*CÑDÔDˆMØð *Ø)Ð=Ð=¨mÐ=Ð=�	�	à)�	ØÐõ ”= Ñ0Ô0ˆØð 	!Ø%Ð4Ð4¨(Ð4Ð4ˆIˆIà ˆIØÐr|   c                 ó  — |dk    r| j         n| j        }|dk    r| j        n| j        }|dk    r| j        n| j        }|                     |d¦  «        }|                     |d¦  «        }|r`|r^||v rt          j        ||         ¦  «        }	n3||v rt          j        ||         ¦  «        }	nt          j        |¦  «        }	|› d|› d|	› �}
|
S |r|  	                    ||¦  «        S |r|  	                    ||¦  «        S t          j        |¦  «        S )z´Generate combined name for two dominant genres.
        
        Format: "(genre1) / (genre2) - (creative name from genre1)"
        Example: "Sci-Fi / Drama - Jine svety"
        r   r´   z / rá   )
rŽ   r�   r�   r‘   rŒ   r�   r˜   r–   r—   r�   )ry   Ú
genre_id_1Ú
genre_id_2rŸ   r¢   r£   r¡   Úname1Úname2rä   rå   s              rz   rœ   z,ChannelNameGenerator._generate_combined_nameÓ  sN  € ð 6@À8Ò5KÐ5K˜$Ô1Ð1ÐQUÔQaˆØ=GÈ8Ò=SÐ=S˜DÔ9Ð9ÐY]ÔYoÐØ7AÀXÒ7MÐ7M˜Ô3Ð3ÐSWÔSfˆà!×%Ò% j°"Ñ5Ô5ˆØ!×%Ò% j°"Ñ5Ô5ˆàð 	1�Uð 	1à˜_Ð,Ð,Ý &¤¨o¸jÔ.IÑ JÔ J��Ø˜Ð.Ð.Ý &¤¨o¸jÔ.IÑ JÔ J��å &¤¨nÑ =Ô =�à Ð>Ð> UÐ>Ð>¨}Ð>Ð>ˆIØÐØð 	1Ø×3Ò3°JÀ
ÑKÔKÐKØð 	1Ø×3Ò3°JÀ
ÑKÔKÐKå”= Ñ0Ô0Ð0r|   )N)r}   )r}   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r�   r�   r‘   rŽ   rŒ   r�   r{   r²   rÍ   r™   r¼   r�   rœ   r‡   r|   rz   r   r      s:  € € € € € ðð ðAØð 
ð 
ð 
ðAð
 	ð 
ð 
ð 
ðAð 	ð 
ð 
ð 
ðAð 	ð 
ð 
ð 
ðAð" 	ð 
ð 
ð 
ð#Að* 	ð 
ð 
ð 
ð+Að2 	ð 
ð 
ð 
ð3Að: 	ð 
ð 
ð 
ð;AðB 	ð 
ð 
ð 
ðCAðJ 	ð 
ð 
ð 
ðKAðR 	ð 
ð 
ð 
ðSAðZ 	ð 
ð 
ð 
ð[Aðb 	ð 
ð 
ð 
ðcAðj 	ð 
ð 
ð 
ðkAðr 	ð 
ð 
ð 
ðsAðz 	ð 
ð 
ð 
ð{A€KðHð ð €NðØˆvðà
ˆLðð 	ˆIðð 	ˆGð	ð
 	ˆJðð 	ˆGðð 	ˆzðð 	ˆzðð 	ˆiðð 	ˆYðð 	ˆyðð 	ˆxðð 	ˆ|ðð 	ˆ{ðð 	ˆ|ðð  	ˆIð!Ðð*MØ
ð 
ð 
ð 
ðMð
 	ð 
ð 
ð 
ðMð 	ð 
ð 
ð 
ðMð 	ð 
ð 
ð 
ðMð" 	ð 
ð 
ð 
ð#Mð* 	ð 
ð 
ð 
ð+Mð2 	ð 
ð 
ð 
ð3Mð: 	ð 
ð 
ð 
ð;MðB 	ð 
ð 
ð 
ðCMðJ 	ð 
ð 
ð 
ðKMðR 	ð 
ð 
ð 
ðSMðZ 	ð 
ð 
ð 
ð[Mðb 	ð 
ð 
ð 
ðcMðj 	ð 
ð 
ð 
ðkMðr 	ð 
ð 
ð 
ðsMðz 	ð 
ð 
ð 
ð{MðB 	ð 
ð 
ð 
ðCMðJ
ð 
ð 
ð
ð 
ð 
ðSMð Mð MÐð`ð ð Ðð Ø
ˆFð à
ˆOð ð 	ˆLð ð 	ˆIð	 ð
 	ˆGð ð 	ˆJð ð 	ˆGð ð 	ˆzð ð 	ˆIð ð 	ˆMð ð 	ˆGð ð 	ˆzð ð 	ˆið ð 	ˆ}ð ð 	ˆXð ð  	ˆyð! ð" 	ˆJð# ð$ Øð' ð  ð  Ðð,0ð 0ð 0ð 0ð<ð <ð <ð <ð|lEð lEð lEð lEð\ð ð ðð ð ð ðð ð ð ð81ð 1ð 1ð 1ð 1ð 1r|   r   )rî   r–   r’   rv   Úwcs.ai.AIProviderr   r   r‡   r|   rz   ú<module>rð      s}   ððð ð €€€Ø €€€Ø Ð Ð Ð à (Ð (Ð (Ð (Ð (Ð (ð`1ð `1ð `1ð `1ð `1ñ `1ô `1ð `1ð `1ð `1r|   