# coding: utf-8
import datetime
import os

from celery import Celery
from sqlalchemy import and_, or_

from app.api.engine import TAMP_SQL, tamp_diagnose_app_engine, template_folder, temp_img_save_folder, \
    redis_host, redis_port, redis_db, redis_password, pdf_save_folder
from app.model.tamp_diagnose_app import HoldReport, HoldDiagnoseReport, PeriodicReport, Customer, ReportView
from app.utils.jinjia2html_v2 import DataIntegrate
from jinja2 import PackageLoader, Environment
from app.utils.html_to_pdf import html_to_pdf

celery_app = Celery(__name__)

celery_conf = "redis://:{}@{}:{}/{}".format(redis_password,redis_host[0],redis_port[0],redis_db[0])
celery_app.conf.update({"broker_url": celery_conf, "result_backend": celery_conf})


@celery_app.task
def save_pdf(id, ifa_id, customer_id, pdf_name, type, report_data):
    """
    加法
    :param x:
    :param y:
    :return:
    """
    try:
        env = Environment(loader=PackageLoader('app', 'templates'))  # 创建一个包加载器对象
        template = env.get_template('/v2/monthReportV2.1.html')  # 获取一个模板文件
        monthReport_html = template.render(report_data).replace('None', 'none')  # 渲染
        # 生成pdf
        html_to_pdf(monthReport_html, pdf_save_folder + pdf_name)
    except:
        pass
    with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
        tamp_diagnose_session = tamp_diagnose_app.session
        res = None
        if type == 1:
            res = tamp_diagnose_session.query(HoldReport).filter(and_(
                HoldReport.id == id,
                HoldReport.ifa_id == ifa_id,
            ))
        elif type == 2:
            res = tamp_diagnose_session.query(HoldDiagnoseReport).filter(and_(
                HoldDiagnoseReport.id == id,
                HoldDiagnoseReport.ifa_id == ifa_id,
            ))
        elif type == 3:
            res = tamp_diagnose_session.query(PeriodicReport).filter(and_(
                PeriodicReport.id == id,
                PeriodicReport.ifa_id == ifa_id,
            ))
        else:
            return False
        if res.all():
            if os.path.exists(pdf_save_folder + pdf_name):
                res.update({
                    'file': pdf_name,
                    'update_status': 2,
                    'update_time': datetime.datetime.now()
                })
            else:
                res.update({
                    'update_status': 0,
                    'update_time': datetime.datetime.now()
                })
    return True