# coding: utf-8

"""
找出所有 ifa
        找出 ifa 所有的客户
                           进行月报生成
"""
import datetime
import time
import traceback
import uuid

from app.api.engine import logging, pdf_folder, tamp_diagnose_app_engine, config, env
import os

from app.api.engine import tamp_user_engine, tamp_order_engine, TAMP_SQL
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer, and_

from app.service.portfolio_diagnose import fund_rank, tamp_fund
from app.utils.jinjia2html_v2 import DataIntegrate
from concurrent import futures

Base = declarative_base()
class IfaUser(Base):
    __tablename__ = "user_info"

    id = Column(String(64), primary_key=True)
    ui_username = Column(String(64))
    ui_sex = Column(String(64))
        
class Ifa_Customer(Base):
    __tablename__ = "ifa_customer"

    id = Column(String(64), primary_key=True)
    customer_id = Column(String(32))
    ifa_id = Column(String(64))
    
        
class Customer(Base):
    __tablename__ = "customer"

    id = Column(String(64), primary_key=True)
    customer_name = Column(String(128))

# class CustomerOrder(Base):
#     __tablename__ = 'customer_order'
#
#     user_id = Column(String(128))
#     customer_id = Column(String(128))

# class UserInfo(Base):
#     __tablename__ = 'user_info'
#
#     id = Column(String(64), primary_key=True)
#     ui_username = Column(String(128))


def call_month_report(ifauser_id, ifauser_name, customer_id, customer_name):
    filename = '{}_{}_.pdf'.format(ifauser_name, customer_name)
    if os.path.exists(pdf_folder + filename):
        return None

    print('开始制作IFA: {}, 客户: {}的基金月报'.format(ifauser_name, customer_name))
    start = time.time()
    try:
        dt = DataIntegrate(ifauser_id, customer_id, '{}_{}_.pdf'.format(ifauser_name, customer_name))
        dt.render_data()
        print('IFA: {}, 客户: {}的基金月报已经生成, 耗时{}秒'.format(ifauser_name, customer_name, time.time()-start))
    except OSError:
        print('IFA: {}, 客户: {}的基金月报已经生成，耗时{}秒'.format(ifauser_name, customer_name, time.time()-start))
    except Exception as e:
        logging.error("IFAID{}: IFAName{}, 客户ID{}, 客户Name: {}的基金月报生成异常，错误追踪：{}".format(ifauser_id, ifauser_name, customer_id, customer_name, traceback.format_exc()))
        print("IFA: {}, 客户: {}的基金月报生成异常，错误追踪：{}".format(ifauser_name, customer_name, traceback.format_exc()))
    finally:
        return


if __name__ == '__main__':
    data = []
    with TAMP_SQL(tamp_user_engine) as tamp_user, TAMP_SQL(tamp_order_engine) as tamp_order:
        tamp_user_session = tamp_user.session
        res = tamp_user_session.execute('SELECT DISTINCT user_id, customer_id , realname, customer_name FROM (select f1.user_id, f1.customer_id, f2.realname,f3.customer_name from tamp_order.customer_order_view f1, tamp_user.user_info f2,tamp_user.customer_info f3   where f2.id=f1.user_id and f3.id=f1.customer_id) res;')
        data = res.fetchall()
    for d in data:
        call_month_report(d[0], d[2], d[1], d[3])

