import requests
import pandas as pd
from datetime import datetime
from time import sleep

FILE = 'yvideos.csv'
START = datetime.fromisoformat('2024-01-01')
STOP = datetime.fromisoformat('2024-11-01')

VQ_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIxIiwianRpIjoiMDU1YTkwMTEwNjMwYzhkMzAzNTlmOGMyNTlkMGJjNmFiZTFiOWVmNWM0YmRjODlkNDBmZTA4OTViYzVjMTAwMDU5YjZmZjdlZDU1YjE3NTEiLCJpYXQiOiIxNzcwNzEwODI5LjI3NTg1OSIsIm5iZiI6IjE3NzA3MTA4MjkuMjc1ODYyIiwiZXhwIjoiMTkyODQ3NzIyOS4yNjA3ODQiLCJzdWIiOiIxOTMxIiwic2NvcGVzIjpbXX0.sAg-fgK7B9ilOI080GqSFsc01akwY3yrxG90SBu8MVTLZB12MNpLUexeNnZM93swK0ppTnOS_mjFciy4PIJZ9W0hjtX0a02o7_IcvwdqD8wBWp9jmerQSh-_dUw7ytA3c4-txwOZ3FTQ3I-U6K8yuPx0kzkHhm8-M6oIfgYuePITPIS9bKJ-6qY-TGI_WiKkYCL5pIaAAhGupcFi15sy4qsar7HPjs7PhAt5d1urRKNu2y1w3LZrd4_qPySdQJrXcTQomQ1R7eSDLlmVR1wymQPRMZQKGvFdC-l7iB0uiPzsoCPQ-oRLmr8KZlCHrECMKFXTyMIzZWsLxgX4YPvK723OfRFceOZHRxhzaP9WTN3laJg0C_wrNSZ-0ixvE02crQjSwPWmTLjh4txxJqN2AF7F1zsHwhMYXGVUIvR-zp_lAFrB_4lFk1l3ROLNG5YGNGyZFr5xC2mT9SOkZoNNiA4Mk6kBtXk940wF9YceOHBOalO9hM9eF9Sl62yVXdpvz3kwURwgY-M9IrBR_TpKavEmaYXHDSi_Uuf50-OrXFMk4qaJAYtWTLXgAXlYjXLYVOV338vBmj2B1gnoloBpWn_dXTIQX8E8je5pr1ukQSMIQGBwz1yNSsKO9VFpnvOXiyIbUdkSLsS7IS87OE20h1KvaLoeeQRyTnH8iwvflYY"
VQ_API_BASE = "https://pubapi.viqeo.tv/v1/"
headers = {
    "Authorization": f"Bearer {VQ_TOKEN}"
}


def get_vq_website_id():
    """Получает ID первого доступного веб-сайта."""
    url = f"{VQ_API_BASE}website"
    params = {"page": 1}
    response = requests.get(url, headers=headers, params=params)
    response.raise_for_status()
    data = response.json()
    items = data.get('items', [])
    if not items:
        raise Exception("Не найдено ни одного веб-сайта для этого токена.")
    return items


def upload_video_and_get_embed(path, title="test API", archive=False):
    """Загружает видео по ссылке и возвращает embed-код."""
    # website_id = get_website_id()
    website_id = 1275 if not archive else 14444
    upload_url = f"{VQ_API_BASE}website/{website_id}/video/upload"
    
    # via url
    payload = {
        "url": path,
        "title": title
    }
    response = requests.post(upload_url, headers=headers, json=payload)
    
    response.raise_for_status()
    
    data = response.json()

    video_item = data['items']['video']
    video_id = video_item['id']
    
    embed_code = f'<script async src="https://cdn.viqeo.tv/js/vq_starter.js"></script><div style="width:100%;height:0;position:relative;padding-bottom: 56.25%;" class="viqeo-embed viqeo-horizontal viqeo-embed--{video_id}" data-vnd="{video_id}" data-profile="1648" data-aspectRatio="0.5625"><iframe src="https://cdn.viqeo.tv/embed/?vid={video_id}" width="100%" height="100%" style="position:absolute;" frameBorder="0" allowFullScreen></iframe></div>'
    
    return video_id, embed_code


def main():
    df = pd.read_csv(FILE)
    df['Published At'] = df['Published At'].apply(lambda x: datetime.fromisoformat(f"{x.split(' ')[0]}T{x.split(' ')[1]}"))
    # df['VIQ ID'] = ''

    mdf = df[df['Published At'].between(START, STOP)].sort_values(by='Published At', ascending=False)

    # try:
    #     vid_id, embed = upload_video_and_get_embed(VIDEO_LINK, title="test API cloud")
    #     print(f"ID видео: {vid_id}")
    #     print("\nEmbed-код плеера:")
    #     print(embed)
    # except Exception as e:
    #     print(f"Ошибка: {e}")
        
    for i, row in mdf.iterrows():
        if type(row['VIQ ID']) is str:
            # print('already loaded')
            continue
        
        y_id = row['Yandex Video ID']
        load_url = f"https://server2.klops.me/videos/id-{y_id}.mp4"
        
        if requests.head(load_url).status_code != 200:
            print('ERROR: Wrong File')
            continue
        title = row['Yandex Video Name']
        
        print(f'Loading {i} - {title}\n{load_url}')
        
        vq_id, code = upload_video_and_get_embed(load_url, title=title, archive=True)
        print(f'viqeo id: {vq_id}\n')
        
        df.loc[df['Yandex Video ID'] == y_id, 'VIQ ID'] = vq_id
        df.loc[df['Yandex Video ID'] == y_id, 'VIQ CODE'] = code
        df.to_csv('yvideos.csv', index=False, encoding='utf-8-sig')
    
        sleep(60)


main()