
    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	 d dl
mZ  e       Z e       Zddedefd	Zd
 Zd Zd Zy)    N)Console)Prompt)Table)start_message)load_search_functionssearch_termsselected_sitesc           
      H
   t               }i }| #t        j                  d      j                         } i }|j	                         D ]'  \  }\  }}||vrg ||<   ||   j                  ||f       ) |t        j                  d       t        j                  d       t        j                  d       t        j                  d       t        j                  dg dd	
      }|d	k(  rt        |j                               }n|dk(  rt        j                  d       t        |j                         d      D ].  \  }	}t        j                  d|	 d|j                                 0 t        j                  dd	      }
|
j                  d      D cg c]8  }t        |j                               t        |j                               dz
     : }}g }|D ]-  }|j                  |g       D ]  \  }}|j                  |        / nt        j                  d       t        |j	                         d      D ]E  \  }	\  }}|j                  d      d   j                         }t        j                  d|	 d|        G t        j                  dd	      }|j                  d      D cg c]  }t        |j                               dz
    }}|D 	cg c]-  }	|	t        |      k  st        |j                               |	   / }}	t        j                  d|         t        j                  dt        |       d       |D ]  }|j                  d      d   j                         }t        j                  d|        ||   \  }}	  || d      }|rt!        |d      rt        |j"                        dkD  rg ||<   |j"                  D ]I  }t!        |d      r|j$                  j'                         }ni }||d <   ||d!<   ||   j                  |       K t        j                  d"t        |j"                         d#        |rYg }|j	                         D ]  \  }}|D ]  }|j                  |         t-        ||        t/        |      }|rt1        ||       |S t        j                  d&|         t        j                  d'd(d)gd(
      d(k(  r
t3                |S c c}w c c}w c c}	w # t(        $ r/}t        j                  d$| d%t+        |              Y d}~d}~ww xY w)*au  
    Perform a search across multiple sites based on selection.
    
    Parameters:
        search_terms (str, optional): The terms to search for. If None, will prompt the user.
        selected_sites (list, optional): List of site aliases to search. If None, will search all sites.
    
    Returns:
        dict: Consolidated search results from all searched sites.
    Nz-
[purple]Enter search terms for global searchz
[green]Select sites to search:z[cyan]1. Search all sitesz[cyan]2. Search by categoryz[cyan]3. Select specific sitesz[green]Enter your choice (1-3))123r   )choicesdefaultr   z$
[green]Select categories to search:   z[cyan]z. z1[green]Enter category numbers separated by commas)r   ,z(
[green]Select specific sites to search:_r   .z-[green]Enter site numbers separated by commasz
[green]Searching for: [yellow]z[green]Searching across: z sites 
z[cyan]Search url in: T)get_onlyDatabase
media_list__dict__sourcesource_aliasz[green]Found result: 
z[red]Error searching : z$
[red]No results found for: [yellow]z[green]Search again? (y/n)yn)r   msgaskstripitemsappendconsoleprintlistkeys	enumerate
capitalizesplitintgetlenhasattrr   r   copy	Exceptionstrdisplay_consolidated_results select_from_consolidated_resultsprocess_selected_itemglobal_search)r   r	   search_functionsall_resultssites_by_categoryaliasfunccategorychoiceicategory_choicescselected_categoriesr   	site_namesite_choicesselected_indicesdatabaseelement	item_dicteall_media_itemsresultsitemselected_items                            a/home/nidran/Documenti/script/streaming-community/StreamingCommunity/cli/command/global_search.pyr3   r3      s    -.KwwOPVVX #3#9#9#; :h,,*,h'(#**E4=9: 891234679?\_`S=!"2"7"7"9:Ns]MMAB():)?)?)A1E E8qcH,?,?,A+BCDE  #ww'Zdgwh]m]s]stw]x"yXY4(9(>(>(@#A#aggi.QRBR#S"y"yN/ 1 1 5 5h C 1HE1"))%011 MMEF!*+;+A+A+CQ!G 8:E1!KK,Q/::<	qc9+678 77#R\_7`L:F:L:LS:QRQAGGIq 0RRHXv1\]`cdt`u\ud#3#8#8#:;A>vNv MM4\NCDMM-c..A-B)LM   IKK$Q'224	-i[9:"5)a	IL4@H GHl;HDWDW@X[\@\%'E"'22 
9Gw
3$+$4$4$9$9$;	$&	 +4Ih'05In-&--i8
9  5c(:M:M6N5OrRS3I> )//1 	-NE7 -&&t,-	-
 	%_lC 9I!-1AB  	=l^LM 77/#sS7QUXXO[ #z   SvD  	IMM1)Bs1vhGHH	Is1   =S##SS$ S$B9S))	T!2$TT!c           
         t        j                  d       t                t        j	                  d| d       t        dd      }|j                  ddd	
       |j                  dd       |j                  dd       t        d | D              }|r|j                  dd       |j                  dd       t        | d      D ]  \  }}|j                  d|j                  dd            }|j                  d|j                  dd            }|j                  dd      }|rt        |j                  dd            nd}	|r:|j                  t        |      t        |      t        |      |	t        |             |j                  t        |      t        |      t        |      t        |              t        j	                  |       y)z
    Display consolidated search results from multiple sites.
    
    Parameters:
        all_media_items (list): List of media items from all searched sites.
        search_terms (str): The search terms used.
    r   z$
[green]Search results for: [yellow]z 
Tcyan)show_headerheader_style#dim   )stylewidthTitle   )	min_widthType   )rS   c              3   2   K   | ]  }d |v xr |d      yw)yearN ).0rH   s     rJ   	<genexpr>z/display_consolidated_results.<locals>.<genexpr>   s      Ot6T>2d6l2Os   Year   Source   titlenameUnknowntype
media_typer   rZ    N)timesleepr   r"   r#   r   
add_columnanyr&   r*   r/   add_row)
rF   r   tablehas_yearr;   rH   rb   rf   r   rZ   s
             rJ   r0   r0      s|    	JJqMOMM9,sKLd8E	SQ/	W+	V2&OOOHq)	XR(_a0 L4$((69"=>XXfdhh|Y&GH
(I.,4s488FB'($MM#a&#e*c*otS[QMM#a&#e*c*os6{KL MM%    c           	          | syt        |       }t        j                  d| dt        |dz         D cg c]  }t	        |       c}dd      }|dk(  ry| t        |      dz
     S c c}w )	z
    Allow user to select an item from consolidated results.
    
    Parameters:
        all_media_items (list): List of media items from all searched sites.
    
    Returns:
        dict: The selected media item or None if no selection was made.
    Nz[green]Select item # (1-z) or 0 to cancelr   r   F)r   r   show_choices0)r+   r   r   ranger/   r)   )rF   	max_indexr;   r:   s       rJ   r1   r1      sy     O$IWW
"9+-=>!&y1}!56AQ6	  F }3v;?++ 7s   A&
c           	          | j                  d      }|r||vrt        j                  d       y||   \  }}t        j                  d| j                  d              d}dD ]  }| j                  |      }|s n | j                  d| j                  dd	            }| j                  d
| j                  dd            }|r*t        j                  d| d| d| d       	  ||        yt        j                  d       | j                         D ]   }
t        j                  d|
 d| |
           " y# t        $ r@}	t        j                  dt	        |	              t        j                  d       Y d}	~	yd}	~	ww xY w)z
    Process the selected item - download the media using the appropriate site API.
    
    Parameters:
        selected_item (dict): The selected media item.
        search_functions (dict): Dictionary of search functions by alias.
    r   zB[red]Error: Cannot process this item - source information missing.Nz#
[green]Processing selection from: r   )idmedia_idIDitem_idurlre   rf   unknownrb   rc   rd   z[green]Selected item: z (ID: z, Type: ))direct_itemz [red]Error processing download: zDownload processing errorz0[red]Error: Item ID not found. Available fields:z
[yellow]- r   )r*   r"   r#   r.   r/   logging	exceptionr%   )rI   r4   r   r8   r   ry   id_field	item_type
item_titlerE   keys              rJ   r2   r2      s    !$$^4L</??Z[ |,GD!MM89J9J89T8UVW G> ##H-
 !!&-*;*;L)*TUI""7M,=,=fi,PQJ.zl&	R[Q\\]^_	;]+ 	HI %%' 	DCMMJse2mC.@-ABC	D  	;MM<SVHEF9::	;s   !	D4 4	E==6E88E=)NN)rh   r~   rich.consoler   rich.promptr   
rich.tabler   (StreamingCommunity.utils.console.messager   !StreamingCommunity.services._baser   r"   r   r/   r$   r3   r0   r1   r2   r[   ro   rJ   <module>r      sY      !   C C )hy yD yvB,4)Dro   