import json


# def save_ad_layout_result(layout_info, table_layout):
#     insert_layout = table_layout.insert()
#     insert_layout = insert_layout.values \
#         (id=layout_info['id'],
#          userid=layout_info['userid'],
#          result=layout_info['result'],
#          layout=layout_info['layout'])
#     return insert_layout


def save_wechat_cookies(wechat_cookies_info, table_wechat_cookies):
    insert_wechat_cookies = table_wechat_cookies.insert()
    insert_layout = insert_wechat_cookies.values \
        (user_id=wechat_cookies_info['user_id'],
         cookies=wechat_cookies_info['cookies']
         )
    return insert_layout


def save_human_info(human_info, table_human):
    insert_human = table_human.insert()
    insert_human = insert_human.values \
        (service_name=human_info['service_name'],
         wechat_name=human_info['wechat_name'],
         human_info=human_info['human_info']
         )
    return insert_human


def save_layout_typesetting_info(layout_typesetting_info, table_layout_typesetting):
    insert_layout_typesetting = table_layout_typesetting.insert()
    insert_layout_typesetting = insert_layout_typesetting.values \
        (typesetting=layout_typesetting_info['typesetting'],
         user_id=layout_typesetting_info['user_id'],
         name=layout_typesetting_info['name']
         )
    return insert_layout_typesetting


def save_ad_plan_typesetting_info(ad_plan_typesetting_info, table_ad_plan_typesetting):
    # TODO:正常action_record  返回plan_name layout_name有问题
    insert_ad_plan_typesetting = table_ad_plan_typesetting.insert()
    insert_ad_plan_typesetting = insert_ad_plan_typesetting.values \
        (typesetting=ad_plan_typesetting_info['typesetting'],
         user_id=ad_plan_typesetting_info['user_id'],
         name=ad_plan_typesetting_info['name']
         )
    return insert_ad_plan_typesetting


def save_wechat_info(wechat_info, table_wechat):
    insert_wechat = table_wechat.insert()
    insert_wechat = insert_wechat.values \
        (service_name=wechat_info['service_name'],
         wechat_name=wechat_info['wechat_name'],
         user_id=wechat_info['user_id']
         )
    return insert_wechat


def save_action_record(action_record_info, table_action_record):
    # TODO:service_name ,wechat_name,action_type 设置全局唯一
    insert_action_record = table_action_record.insert()
    insert_action_record = insert_action_record.values \
        (service_name=action_record_info['service_name'],
         wechat_name=action_record_info['wechat_name'],
         user_id=action_record_info['user_id'],
         action_type=action_record_info['action_type'],
         status=action_record_info['status'],
         )
    return insert_action_record


def delete_wechat_info(sql_session, user_id):
    sql = '''
    delete from wechat_info 
        where user_id = '{}' 
    '''.format(user_id)
    sql_session.execute(sql)
    sql_session.commit()


def get_human_info(sql_session, service_name, wechat_name):
    sql = '''
        select human_info from human_info hi 
        where service_name='{service_name}' and wechat_name='{wechat_name}' ;
    '''.format(service_name=service_name, wechat_name=wechat_name)
    cursor = sql_session.execute(sql)
    lines = cursor.fetchall()
    result_list = lines[0][0]
    return result_list


def get_layout_typesetting_rough(sql_session, user_id, typesetting_name):
    sql = '''
            select typesetting,name,create_time,update_time from layout_typesetting lt 
            where user_id ='{}' and is_delete=0 and name like '%{}%';
    '''.format(user_id, typesetting_name)
    print(sql)
    cursor = sql_session.execute(sql)
    lines = cursor.fetchall()
    result_list = [line for line in lines]
    return result_list


def get_layout_typesetting(sql_session, user_id, typesetting_name):
    sql = '''
            select typesetting from layout_typesetting lt 
            where user_id ='{}' and name='{}' and is_delete=0;
    '''.format(user_id, typesetting_name)
    cursor = sql_session.execute(sql)
    lines = cursor.fetchall()
    if lines:
        result_list = lines[0][0]
        return result_list

def delete_layout_typesetting_vir(sql_session, user_id, typesetting_name):
    sql = '''
            update layout_typesetting lt 
            set is_delete=1
            where user_id ='{}' and name = '{}';
    '''.format(user_id, typesetting_name)
    print(sql)
    sql_session.execute(sql)
    sql_session.commit()

def get_plan_typesetting_rough(sql_session, user_id, typesetting_name):
    sql = '''
            select typesetting,name,create_time,update_time from ad_plan_typesetting lt 
            where user_id ='{}' and is_delete=0 and name like '%{}%';
    '''.format(user_id, typesetting_name)
    print(sql)
    cursor = sql_session.execute(sql)
    lines = cursor.fetchall()
    result_list = [line for line in lines]
    return result_list


def get_ad_plan_typesetting(sql_session, user_id, typesetting_name):
    sql = '''
            select typesetting from ad_plan_typesetting lt 
            where user_id ='{}' and name='{}' and is_delete=0;
    '''.format(user_id, typesetting_name)
    cursor = sql_session.execute(sql)
    lines = cursor.fetchall()
    if lines:
        result_list = lines[0][0]
        return result_list

def delete_ad_plan_typesetting_vir(sql_session, user_id, typesetting_name):
    sql = '''
            update ad_plan_typesetting lt 
            set is_delete=1
            where user_id ='{}' and name = '{}';
    '''.format(user_id, typesetting_name)
    print(sql)
    sql_session.execute(sql)
    sql_session.commit()

def get_undo_action(sql_session, user_id):
    # TODO:sql 里面添加doing,error状态的挑选
    sql = '''
        select action_type ,wechat_name ,service_name 
            from action_record 
        where user_id='{}' and status ='todo' ;
    '''.format(user_id)
    cursor = sql_session.execute(sql)
    lines = cursor.fetchall()
    result_list = [line for line in lines]
    return result_list


def get_ad_status(sql_session, user_id):
    sql = '''
       select  action_type ,wechat_name ,service_name,max(update_time ),max(create_time),status from action_record  
       where user_id='{}'
group by  action_type ,wechat_name ,service_name,status ;
    '''.format(user_id)
    cursor = sql_session.execute(sql)
    lines = cursor.fetchall()
    result = [line for line in lines]
    return result


def get_action_status(sql_session, user_id):
    # TODO:sql 里面添加doing,error状态的挑选
    sql = '''
        select count(*)
            from action_record 
        where user_id='{}' and status ='doing' ;
    '''.format(user_id)
    cursor = sql_session.execute(sql)
    lines = cursor.fetchall()
    result = lines[0][0]
    return result


def action_record(res, sql_session, action_type, user_id, object_name, action_table, service_name, wechat_name):
    print('get in action record ', service_name, wechat_name, res)
    status = 'done' if res['sucess'] else 'error'
    action_type = json.dumps({'action_type': action_type, 'object_name': object_name})
    print(action_type)
    update_res = action_table.update() \
        .where(action_table.c.service_name == service_name) \
        .where(action_table.c.wechat_name == wechat_name) \
        .where(action_table.c.user_id == user_id) \
        .where(action_table.c.action_type == action_type) \
        .values({
        action_table.c.status: status,
        action_table.c.result: res['result_info']
    })
    # values 添加两个列
    sql_session.execute(update_res)
    sql_session.commit()


def check_layout_alive(sql_session, service_name, wechat_name, layout_name):
    sql = '''
            select count(*) from action_record ar 
        where service_name='{service_name}'
        and wechat_name='{wechat_name}'
        and action_type like '%layout_create%'
        and action_type like '%{layout_name}%'
        and status='done'
    '''.format(service_name=service_name, wechat_name=wechat_name, layout_name=layout_name)
    print(sql)
    cursor = sql_session.execute(sql)
    num = cursor.fetchall()[0][0]
    return num


def check_plan_alive(sql_session, service_name, wechat_name, plan_name):
    sql = '''
               select count(*) from action_record ar 
           where service_name='{service_name}'
           and wechat_name='{wechat_name}'
           and action_type like '%ad_plan_create%'
           and action_type like '%{plan_name}%'
           and status='done'
       '''.format(service_name=service_name, wechat_name=wechat_name, plan_name=plan_name)
    print('plan ', sql)
    cursor = sql_session.execute(sql)
    num = cursor.fetchall()[0][0]
    return num


def get_wechat_info(sql_session, user_id):
    sql = '''
        select service_name ,wechat_name from wechat_info
        where user_id ='{}' ;
    '''.format(user_id)
    cursor = sql_session.execute(sql)
    lines = cursor.fetchall()
    result_list = [line for line in lines]
    return result_list


def get_wechat_cookies(sql_session, user_id):
    sql = '''
    select cookies from wechat_cookies where user_id='{}'
    '''.format(user_id)
    cursor = sql_session.execute(sql)
    lines = cursor.fetchall()
    print(type(lines), lines)
    if lines:
        return lines[0][0]