import sys
import json
import requests
from urllib.parse import quote
try:
    from base.spider import Spider as BaseSpider
except Exception:
    class BaseSpider(object):
        pass

class Spider(BaseSpider):
    site = "https://rb.jnyk08.icu"
    api = "https://api.vuecloudrb.com"
    headers = {"User-Agent": "Mozilla/5.0", "Referer": site + "/", "Origin": site}

    def getName(self):
        return "91热爆"

    def init(self, extend=""):
        self.site = "https://rb.jnyk08.icu"
        self.api = "https://api.vuecloudrb.com"
        self.headers = {"User-Agent": "Mozilla/5.0", "Referer": self.site + "/", "Origin": self.site}

    def isVideoFormat(self, url):
        return True

    def manualVideoCheck(self):
        return False

    def destroy(self):
        return None

    def _ok(self):
        if not hasattr(self, "api"):
            self.init("")

    def _get(self, path, params=None):
        self._ok()
        r = requests.get(self.api + path, headers=self.headers, params=params or {}, timeout=10)
        return r.json()

    def _time(self, s):
        try:
            s = int(s or 0)
            h, m, sec = s // 3600, s % 3600 // 60, s % 60
            return "%02d:%02d:%02d" % (h, m, sec) if h else "%02d:%02d" % (m, sec)
        except Exception:
            return ""

    def _pic(self, i):
        return i.get("video_img") or i.get("screenshot1") or ""

    def _items(self, data):
        if isinstance(data, dict):
            data = data.get("data") or data.get("list_new", {}).get("data") or data.get("list_hot", {}).get("data") or []
        return [{
            "vod_id": str(i.get("video_id") or i.get("id") or ""),
            "vod_name": i.get("title") or i.get("name") or "",
            "vod_pic": self._pic(i),
            "vod_remarks": self._time(i.get("duration", 0))
        } for i in (data or []) if i.get("video_id") or i.get("id")]

    def homeContent(self, filter):
        cls = [{"type_id": "all", "type_name": "推荐"}, {"type_id": "new", "type_name": "最新"}, {"type_id": "hot", "type_name": "热门"}]
        try:
            c = self._get("/videos/classification", {"page": 1, "size": 50, "categories": 0, "sort": "post_date"}).get("content", [])
            cls += [{"type_id": str(i.get("category_id")), "type_name": i.get("title", "")} for i in c if i.get("category_id")]
        except Exception:
            pass
        data = self._get("/videos/index_byall", {"page": 1, "size": 24, "categories": 0, "sort": "post_date"}).get("content", {})
        return {"class": cls, "list": self._items(data.get("list_new", {}))}

    def homeVideoContent(self):
        data = self._get("/videos/index_byall", {"page": 1, "size": 24, "categories": 0, "sort": "post_date"}).get("content", {})
        return {"list": self._items(data.get("list_new", {}))}

    def categoryContent(self, tid, pg, filter, extend):
        pg = int(pg or 1)
        if tid == "all":
            data = self._get("/videos/index", {"page": pg, "size": 24}).get("content", {})
        elif tid == "new":
            data = self._get("/videos/index_byall", {"page": pg, "size": 24, "categories": 0, "sort": "post_date"}).get("content", {}).get("list_new", {})
        elif tid == "hot":
            data = self._get("/videos/index_byall", {"page": pg, "size": 24, "categories": 0, "sort": "video_viewed"}).get("content", {}).get("list_hot", {})
        elif str(tid).startswith("tag_"):
            data = self._get("/videos/list_bytags", {"page": pg, "size": 24, "categories": 0, "sort": "post_date", "tags": str(tid)[4:]}).get("content", {})
        else:
            data = self._get("/videos/index", {"page": pg, "size": 24, "categories": tid, "sort": "post_date"}).get("content", {})
        return {"list": self._items(data), "page": pg, "pagecount": data.get("last_page", pg), "limit": 24, "total": data.get("total", 0)}

    def detailContent(self, ids):
        vid = str(ids[0])
        c = self._get("/videos/detail", {"id": vid}).get("content", {})
        name = c.get("title") or vid
        pic = c.get("video_img") or ""
        tags = ",".join([i.get("tag", "") for i in c.get("tags", []) if isinstance(i, dict)])
        cats = ",".join([i.get("title", "") for i in c.get("categories", []) if isinstance(i, dict)])
        return {"list": [{
            "vod_id": vid,
            "vod_name": name,
            "vod_pic": pic,
            "type_name": cats,
            "vod_year": c.get("post_date", ""),
            "vod_area": "",
            "vod_remarks": self._time(c.get("duration", 0)),
            "vod_actor": tags,
            "vod_director": "",
            "vod_content": name,
            "vod_play_from": "直连",
            "vod_play_url": name + "$" + vid
        }]}

    def searchContent(self, key, quick, pg="1"):
        data = self._get("/videos/search", {"keyword": key, "page": int(pg or 1), "limit": 20}).get("content", {})
        return {"list": self._items(data), "page": int(pg or 1), "pagecount": data.get("last_page", 1), "limit": 20, "total": data.get("total", 0)}

    def searchContentPage(self, key, quick, pg):
        return self.searchContent(key, quick, pg)

    def playerContent(self, flag, id, vipFlags):
        vid = str(id).strip()
        base = str((int(vid) // 1000) * 1000) if vid.isdigit() else vid[:-3] + "000"
        url = "https://delivery.douyinpaly.com/hls/contents/videos/%s/%s/%s.mp4/index.m3u8" % (base, vid, vid)
        return {"parse": 0, "playUrl": "", "url": url, "header": {"User-Agent": "Mozilla/5.0", "Referer": self.site + "/", "Origin": self.site}}

    def localProxy(self, param):
        return None
