import sys

from base.model.re_find_model import ReFindModel

sys.path.append("/")  # 解决潜在的路径依赖问题
sys.path.append("../")  # 解决潜在的路径依赖问题
sys.path.append("../../")  # 解决潜在的路径依赖问题

from base.utils.log import logger
from base.math_utils.math_impl.mainbody_context_impl import CommonMainbodyContext
from base.math_utils.math_impl.news_cheak_impl import CommonNewsCheak
from base.math_utils.math_impl.page_cheak_impl import CommonPageCheak
from base.math_utils.math_impl.search_input_impl import CommonSearchInputImpl
from base.utils.mongo_helper import query_list_new

import time
import traceback

SEED_TABLE_NAME = "aic_news_range_seed"


def getReMission(is_renews=True, is_repage=True, is_reinput=True):
    words = []
    items = query_list_new("aic_news_range_seed", {"kind": "news"})
    for item in items:
        if is_renews:
            if item.get('re_news') is None or item.get('re_news') == "":
                words.append(item['name'])
                continue
        if is_repage:
            if item.get('re_page') is None or item.get('re_page') == "":
                words.append(item['name'])
                continue
        if is_reinput:
            if item.get('re_input') is None or item.get('re_input') == "":
                words.append(item['name'])
                continue
    words.reverse()  # 反转列表，先处理最后的
    return words


def single_serve(word, webName):
    try:
        model = ReFindModel([
            CommonSearchInputImpl(), CommonPageCheak(), CommonNewsCheak(), CommonMainbodyContext()
        ])
        logger.info("model实例化成功 word={},webName={}".format(word, webName))
        model.deal(webName)
        logger.info("完成字符串更新")
    except:
        traceback.print_exc()
        time.sleep(60)


def run_news_serve():
    while True:
        for webName in getReMission(is_renews=True, is_reinput=False, is_repage=False):
            logger.info("渠道: {}".format(webName))
            try:
                single_serve("金融", webName)
            except:
                traceback.print_exc()
                time.sleep(5)

        for webName in getReMission():
            logger.info("渠道: {}".format(webName))
            try:
                single_serve("金融", webName)
            except:
                traceback.print_exc()
                time.sleep(5)

        for webName in getReMission(is_renews=True, is_reinput=False, is_repage=False):
            logger.info("渠道: {}".format(webName))
            try:
                single_serve("金融", webName)
            except:
                traceback.print_exc()
                time.sleep(5)

        print("[stop]已完成所有渠道更新任务,等待下次自动更新")
        time.sleep(60 * 60)


if __name__ == '__main__':
    run_news_serve()
