# -*- coding: utf-8 -*-
import re, json, requests
from base.spider import Spider
class Spider(Spider):
    def getName(self): return "Chaturbate 直播"
    def init(self, extend=""):
        self.base, self.headers = "https://chaturbate.com", {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
        return self
    def homeContent(self, filter):
        return {"class": [{"type_id": "f", "type_name": "女性"}, {"type_id": "m", "type_name": "男性"}, {"type_id": "c", "type_name": "情侣"}]}
    def categoryContent(self, tid, pg, filter, extend):
        pg = int(pg) if pg else 0
        gender = {"f": "f", "m": "m", "c": "c"}.get(tid, "")
        url = f"{self.base}/api/ts/roomlist/room-list/?enable_recommendations=false&genders={gender}&limit=90&offset={pg*90}"
        data = self.fetch(url, headers=self.headers).json()
        total = data.get("total_count", 0)
        videos = [
            {"vod_id": r["username"], "vod_pic": r.get("img", ""), "vod_remarks": "",
             "vod_name": f'{r["username"]}{" (" + str(r["display_age"]) + ")" if r.get("display_age") else ""}'}
            for r in data.get("rooms", [])
        ]
        return {"list": videos, "page": pg + 1, "pagecount": (total + 89) // 90, "limit": 90, "total": total}
    def detailContent(self, ids):
        room_slug = ids[0]
        return {"list": [{"vod_id": room_slug, "vod_name": f"Chaturbate - {room_slug}", "vod_pic": "", 
                "vod_play_from": "Chaturbate", "vod_play_url": f"直播源${room_slug}"}]}
    def playerContent(self, flag, id, vipFlags):
        url, data, headers = "https://chaturbate.com/get_edge_hls_url_ajax/", {"room_slug": id}, {"X-Requested-With": "XMLHttpRequest"}
        try:
            play_url = requests.post(url, data=data, headers=headers).json().get("url", id)
        except (requests.RequestException, json.JSONDecodeError):
            play_url = id
        return {"parse": 0, "playUrl": "", "url": play_url, "header": headers}

    def searchContent(self, key, quick, pg="0"):
        pg = int(pg) if pg else 0
        url_api = f"{self.base}/api/ts/roomlist/room-list/?enable_recommendations=false&limit=90&offset={pg*90}&query={key}"
        data = self.fetch(url_api, headers=self.headers).json()
        videos = [
            {"vod_id": r["username"], "vod_pic": r.get("img", ""), "vod_remarks": "",
             "vod_name": f'{r["username"]}{" (" + str(r["display_age"]) + ")" if r.get("display_age") else ""}'}
            for r in data.get("rooms", [])
        ]
        return {"list": videos}

    def isVideoFormat(self, url): return ".m3u8" in url
    def manualVideoCheck(self): return True