import requests
import json
from base import SUBTITLE_DIR, SUBSOURCE_BASE_URL, SUBSOURCE_API_KEY

class subsource():
    def search(self, query: str):
        response = requests.post(f"{SUBSOURCE_BASE_URL}movies/search?searchType=text&q={query}", data=json.dumps({"query": query}),headers={"X-API-Key": "your_api_key_here"})
        return response.json()['results']
    def get_title(self, title: str, type: int, season: int = None):
        if type == 1:
            response = requests.post("https://api.subsource.net/api/v1", data=json.dumps({"movieName": title}),headers={"Host": "api.subsource.net", "Origin": "https://subsource.net", "Referer": "https://subsource.net/", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36","Content-Type": "application/json", "Accept": "application/json, text/plain, */*"})
        elif type == 2:
            response = requests.post("https://api.subsource.net/api/v1",data=json.dumps({"movieName": title, "season": f"season-{season}"}),headers={"Host": "api.subsource.net", "Origin": "https://subsource.net", "Referer": "https://subsource.net/", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36","Content-Type": "application/json", "Accept": "application/json, text/plain, */*"})
        return response.json()['subs']
    def download_sub(self, subtitle_id: str, filename: str):
        with requests.post("https://api.subsource.net/api/v1", stream=True,data=json.dumps({"id": subtitle_id}), headers={"Host": "api.subsource.net", "Origin": "https://subsource.net", "Referer": "https://subsource.net/", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36","Content-Type": "application/json", "Accept": "application/json, text/plain, */*"}) as r:
            with open(f'{SUBTITLE_DIR}{filename}', 'wb') as f:
                for chunk in r.iter_content(chunk_size=8192):
                    f.write(chunk)
        return filename

def request_to_subsource(endpoint: str, query: str, headers: dict):
    return requests.get(f'{SUBSOURCE_BASE_URL}{endpoint}{query}', headers=headers)

headers = {"X-API-Key": SUBSOURCE_API_KEY}
res = request_to_subsource('/movies/search',f'?searchType=imdb&imdb=tt4179452',headers)
subsource_id = res.json()['data'][0]['movieId']
res = request_to_subsource('/subtitles',f'?movieId={subsource_id}&language=farsi_persian',headers)
subtitle_id = res.json()['data'][0]['subtitleId']
release_info = res.json()['data'][0]['releaseInfo']
headers = {
    "X-API-Key": SUBSOURCE_API_KEY,
    "contentType": "application/zip",
    "contentDisposition": "attachment; filename=\"movie_title_en_12345-[SubSource].zip\"",
    "body": "ZIP file stream"
}
res = request_to_subsource('/subtitles',f'/{subtitle_id}/download',headers)
if res.status_code == 200:
    content_type = res.headers.get("Content-Type", "")
    if "text/html" in content_type.lower():
        exit()
    else:
        with open('test.zip', "wb") as f:
            for chunk in res.iter_content(chunk_size=8192):
                if chunk:
                    f.write(chunk)