import json
from flask_apscheduler import APScheduler
from flask import request

from log_setting import configure_logging, logger, error_logging
from route import app, db
from app.assistants.views import assistants
from app.qywx.views import qywx
from app.to_libreChat.views import to_libre_chat
from thread_id_erp import erp_thread_id
from thread_id_hr import hr_thread_id
from thread_id_qw import qw_thread_id

app.register_blueprint(assistants, url_prefix='/assistants')
app.register_blueprint(qywx, url_prefix='/qywx')
app.register_blueprint(to_libre_chat, url_prefix='/to_libreChat')


# 调用configure_logging函数配置日志
configure_logging()

# error日志配置
error_logging()

app.config.update({
    'db': db,
    'erp_thread_id': erp_thread_id,
    'qw_thread_id': qw_thread_id,
    'hr_thread_id': hr_thread_id,
})


# 记录所有请求参数
@app.before_request
def before_request_log():
    try:
        data = request.data
    except Exception as e:
        data = ''
        logger.info(f"请求路径: {request.path}, 请求方法: {request.method}, 请求参数异常: {e}")
    logger.info(f"请求路径: {request.path}, 请求方法: {request.method}, 请求参数: {data}")


# # 记录所有返回内容
# @app.after_request
# def after_request_log(response):
#     response_data = response.get_data(as_text=True)
#     if response_data:  # Check if response_data is not empty
#         try:
#             data_dict = json.loads(response_data)
#             data = json.dumps(data_dict, ensure_ascii=False)
#         except json.JSONDecodeError:
#             data = response_data  # Use the raw response_data if it cannot be loaded as JSON
#     else:
#         data = ''
#     logger.info(f"请求路径: {request.path}, 请求方法: {request.method}, 返回参数: {data}")
#     return response


@app.route('/')
def home():
    app.logger.info('访问了首页')
    return 'Hello, World!'


class Config(object):
    JOBS = [
        {
            'id': 'task_save_messages',
            'func': '.tasks:task_save_messages',
            'args': (),
            'trigger': 'interval',
            'seconds': 60 * 30
        },
        {
            'id': 'task_save_conversations',
            'func': '.tasks:task_save_conversations',
            'args': (),
            'trigger': 'interval',
            'seconds': 60 * 30
        },
        {
            'id': 'task_save_assistants',
            'func': '.tasks:task_save_assistants',
            'args': (),
            'trigger': 'cron',
            'day': '*',
            'hour': '0',
            'minute': '0',
            'second': '1'
        },
        {
            'id': 'task_check_unfamiliar_accounts',
            'func': '.tasks:task_check_unfamiliar_accounts',
            'args': (),
            'trigger': 'cron',
            'day_of_week': 'mon',
            'hour': '0',
            'minute': '0',
            'second': '1'
        },
        # {
        #     'id': 'task_sync_save_report_product',
        #     'func': '.tasks:task_sync_save_report_product',
        #     'args': (),
        #     'trigger': 'interval',
        #     'seconds': 60 * 50
        # },
    ]
    SCHEDULER_API_ENABLED = True


if __name__ == '__main__':
    app.config.from_object(Config())

    scheduler = APScheduler()
    scheduler.init_app(app)
    scheduler.start()
    app.run(host='0.0.0.0', port=8080)

    # 生成数据库
    # with app.app_context():
    #     db.init_app(app)
    #     db.create_all()
