# 引入 check_feed 和 parse_feed 函数
from friend_circle_lite.get_info import fetch_and_process_data, sort_articles_by_time, marge_data_from_json_url, marge_errors_from_json_url, deal_with_large_data
from friend_circle_lite.get_conf import load_config
from rss_subscribe.push_article_update import get_latest_articles_from_link, extract_emails_from_issues
from push_rss_update.send_email import send_emails

import logging
import json
import sys
import os

# 日志记录
logging.basicConfig(level=logging.INFO, format='😋 %(levelname)s: %(message)s')


# 爬虫部分内容
config = load_config("./conf.yaml")
if config["spider_settings"]["enable"]:
    logging.info("爬虫已启用")
    json_url = config['spider_settings']['json_url']
    article_count = config['spider_settings']['article_count']
    specific_RSS = config['specific_RSS']
    logging.info("正在从 {json_url} 中获取，每个博客获取 {article_count} 篇文章".format(json_url=json_url, article_count=article_count))
    result, lost_friends = fetch_and_process_data(json_url=json_url, specific_RSS=specific_RSS, count=article_count)
    if config["spider_settings"]["merge_result"]["enable"]:
        marge_json_url = config['spider_settings']["merge_result"]['merge_json_url']
        logging.info("合并数据功能开启，从 {marge_json_url} 中获取境外数据并合并".format(marge_json_url=marge_json_url + "/all.json"))
        result = marge_data_from_json_url(result, marge_json_url + "/all.json")
        lost_friends = marge_errors_from_json_url(lost_friends, marge_json_url + "/errors.json")
    logging.info("数据获取完毕，目前共有 {count} 位好友的动态，正在处理数据".format(count=len(result.get("article_data", []))))
    result = deal_with_large_data(result)

    with open("all.json", "w", encoding="utf-8") as f:
        json.dump(result, f, ensure_ascii=False, indent=2)
    with open("errors.json", "w", encoding="utf-8") as f:
        json.dump(lost_friends, f, ensure_ascii=False, indent=2)

if config["email_push"]["enable"] or config["rss_subscribe"]["enable"]:
    logging.info("推送功能已启用，正在准备推送，获取配置信息")
    email_settings = config["smtp"]
    email = email_settings["email"]
    server = email_settings["server"]
    port = email_settings["port"]
    use_tls = email_settings["use_tls"]
    password = os.getenv("SMTP_PWD")
    logging.info("SMTP 服务器信息：{server}:{port}".format(server=server, port=port))
    logging.info("密码：{pwd}************".format(pwd=password[:3]))

if config["email_push"]["enable"]:
    logging.info("邮件推送已启用")
    logging.info("抱歉，目前暂未实现功能")
    
if config["rss_subscribe"]["enable"]:
    logging.info("RSS 订阅推送已启用")
    # 获取并强制转换为字符串
    # 尝试从环境变量获取 FCL_REPO
    fcl_repo = os.getenv('FCL_REPO')

    # 提取 github_username 和 github_repo
    if fcl_repo:
        github_username, github_repo = fcl_repo.split('/')
    else:
        github_username = str(config["rss_subscribe"]["github_username"]).strip()
        github_repo = str(config["rss_subscribe"]["github_repo"]).strip()
    
    # 输出 github_username 和 github_repo
    logging.info("github_username: {github_username}".format(github_username=github_username))
    logging.info("github_repo: {github_repo}".format(github_repo=github_repo))
    
    your_blog_url = config["rss_subscribe"]["your_blog_url"]
    email_template = config["rss_subscribe"]["email_template"]
    # 获取网站信息
    website_title = config["rss_subscribe"]["website_info"]["title"]
    # 获取最近更新的文章
    latest_articles = get_latest_articles_from_link(
        url=your_blog_url,
        count=5,
        last_articles_path="./rss_subscribe/last_articles.json"
        )
    logging.info("获取到的最新文章为：{latest_articles}".format(latest_articles=latest_articles))
    if latest_articles == None:
        logging.info("无未进行推送的新文章")
    else:
        github_api_url = "https://api.github.com/repos/" + github_username + "/" + github_repo + "/issues" + "?state=closed&label=subscribed&per_page=200"
        logging.info("正在从 {github_api_url} 中获取订阅信息".format(github_api_url=github_api_url))
        email_list = extract_emails_from_issues(github_api_url)
        if email_list == None:
            logging.info("无邮箱列表，请检查您的订阅列表是否有订阅者或订阅格式是否正确")
            sys.exit(0)
        else:
            logging.info("获取到的邮箱列表为：{email_list}".format(email_list=email_list))
        # 循环latest_articles，发送邮件
        for article in latest_articles:
            template_data = {
                "title": article["title"],
                "summary": article["summary"],
                "published": article["published"],
                "link": article["link"],
                "website_title": website_title,
                "github_issue_url": f"https://github.com/{github_username}/{github_repo}/issues?q=is%3Aissue+is%3Aclosed",
            }
            
            send_emails(
                emails=email_list["emails"],
                sender_email=email,
                smtp_server=server,
                port=port,
                password=password,
                subject= website_title + "の最新文章：" + article["title"],
                body="文章链接：" + article["link"] + "\n" + "文章内容：" + article["summary"] + "\n" + "发布时间：" + article["published"],
                template_path=email_template,
                template_data=template_data,
                use_tls=use_tls
            )
