
    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
  e       Zej                  j                  dd      Z G d d	      Z ee      Zy)
    N)SequenceMatcher)Console)config_manager)create_clientget_userAgentTMDBapi_keyc            	       j    e Zd Zd ZddZd Zddedededefd	Z	dd
ede
dedefdZdd
ededefdZy)
TMDBClientc                      || _         d| _        y)z
        Initialize the class with the API key.
        
        Parameters:
            - api_key (str): The API key for authenticating requests to TheMovieDB.
        zhttps://api.themoviedb.org/3N)r	   base_url)selfr	   s     Y/home/nidran/Documenti/script/streaming-community/StreamingCommunity/utils/tmdb_client.py__init__zTMDBClient.__init__   s     6    Nc                 B   	 |i }| j                   |d<   | j                   d| }t        dt               i      j	                  ||      }|j                          |j                         S # t        $ r(}t        j                  d| d| d	       i cY d}~S d}~ww xY w)
a7  
        Make a request to the given API endpoint with optional parameters.
        
        Parameters:
            - endpoint (str): The API endpoint to hit.
            - params (dict): Additional parameters for the request.
        
        Returns:
            dict: JSON response as a dictionary.
        Nr	   /z
User-Agent)headers)paramsz[red]Error making request to z: z[/red])
r	   r   r   r   getraise_for_statusjson	Exceptionconsolelog)r   endpointr   urlresponsees         r   _make_requestzTMDBClient._make_request!   s    	~ $F9]]O1XJ/C$lMO-LMQQRU^dQeH%%'==?" 	KK7zA3fMNI	s   A*A- -	B6BBBc                    t        j                  d|      j                  dd      j                  d      }t	        j
                  dd|      j                         j                         }t	        j
                  dd|      }|S )z#Normalize and slugify a given text.NFKDasciiignorez[^\w\s-] z[-\s]+-)unicodedata	normalizeencodedecoderesubstriplower)r   texts     r   _slugifyzTMDBClient._slugify9   sh    $$VT299'8LSST[\vvk2t,224::<vvid+r   slug1slug2	thresholdreturnc                 B    t        d||      j                         }||k\  S )z;Check if two slugs are similar enough using fuzzy matching.N)r   ratio)r   r1   r2   r3   r6   s        r   _slugs_matchzTMDBClient._slugs_match@   s$    eU399;	!!r   slugyear
media_typelanguage_preferencec                 "   |dk(  r| j                  d|j                  dd      |d      j                  dg       }t        |      dk(  rd|d   d	   d
S |D ]i  }|j                  d      }|j                  d      }|rt	        |dd       }	n7| j                  |      }
| j                  |
|      s[|	|k(  sad|d	   d
c S  y|dk(  r| j                  d|j                  dd      |d      j                  dg       }t        |      dk(  rd|d   d	   d
S |D ]i  }|j                  d      }|j                  d      }|rt	        |dd       }n7| j                  |      }| j                  ||      s[||k(  sad|d	   d
c S  yt        d       y)zU
        Get the type (movie or tv) and ID from TMDB based on slug and year.
        moviesearch/movier&    querylanguageresults   r   id)typerE   titlerelease_dateN   tv	search/tvnamefirst_air_datez6Media type not specified. Searching both movie and tv.)r    replacer   lenintr0   r7   print)r   r8   r9   r:   r;   movie_resultsr=   rG   rH   
movie_year
movie_slug
tv_resultsshowrL   rM   	show_year	show_slugs                    r   get_type_and_id_by_slug_yearz'TMDBClient.get_type_and_id_by_slug_yearE   s      ..~VY[^I_  nA  @B  C  G  G  HQ  SU  VM =!Q& '}Q/?/EFF ' @		'*$yy8!$\"1%5!6J!]]51
 $$Z6:;M$+5;??@ 4++K4<<PSUXCYgz9{|  A  A  BK  MO  PJ :!# $JqM$,?@@ # <xx'!%*:!;! #N2A$6 7I MM$/	 $$Y5)t:K$(T
;;<  JKr   c                    |dk(  r| j                  d|j                  dd      |d      j                  dg       }t        |      dk(  rt	        |d   d	   d
d       S |D ]Z  }|j                  d      }|j                  d	      }|s(| j                  |      }| j                  ||      sLt	        |d
d       c S  y
|dk(  r| j                  d|j                  dd      |d      j                  dg       }t        |      dk(  rt	        |d   d   d
d       S |D ]Z  }	|	j                  d      }
|	j                  d      }|s(| j                  |
      }| j                  ||      sLt	        |d
d       c S  y
)z
        Get the year from TMDB based on slug and type (movie or tv).
        Returns the year from the first search result that matches the slug.
        r=   r>   r&   r?   r@   rC   rD   r   rH   NrI   rG   rJ   rK   rM   rL   )r    rN   r   rO   rP   r0   r7   )r   r8   r:   r;   rC   r=   rG   rH   rT   rV   rL   rM   rX   s                r   get_year_by_slug_and_typez$TMDBClient.get_year_by_slug_and_type   s   
  ((4<<PSUXCYgz9{|  A  A  BK  MO  PG 7|q 71:n5bq9:: ! 1		'*$yy8#!]]51
 $$Z6|BQ/001D + 4((SRU@Vdw6xy}}  H  JL  MG 7|q 71:&67;<<   3xx'!%*:!;% MM$/	 $$Y5~bq1223 r   )N)g333333?)Nit)r\   )__name__
__module____qualname__r   r    r0   strfloatboolr7   rP   rY   r[    r   r   r   r      sp    70"# "c "e "t "
8 8C 8S 8nq 8t/c /s /Y\ /r   r   )r+   r'   difflibr   rich.consoler   StreamingCommunity.utilsr   $StreamingCommunity.utils.http_clientr   r   r   loginr   r	   r   tmdb_clientrc   r   r   <module>rj      sW    
  # ! 4 M )



"
"69
5X Xv !r   