# -*- coding: utf-8 -*-
"""
Created on Wed Jun  5 10:20:25 2019

@author: zhouyujiang
客服部发送Infosys加密文件
"""

import os
import datetime
import time
import shutil
import configparser
from func_send_email_with_file import send_file_email


def func_mk_send_file_name(date, folder):
    datestr = str(date).replace('-', '')[2:8]
    AUfile = folder + '\\' + 'AU' + datestr + '.ZIP'
    PIfile = folder + '\\' + 'PI' + datestr + '.ZIP'

    return [AUfile, PIfile]


def func_find_recent_folder(aims_path):
    folder_dict = {}
    folder_list = []

    #    for root, dirs, file in os.walk(aims_path):
    #        folder_list = dirs
    #    for i in folder_list:
    folder_list = [i for i in os.listdir(aims_path) if not os.path.isdir(i)]
    new_folder_List = sorted(folder_list, reverse=True)
    # for one in folder_list:
    #     file_path = aims_path + '\\' + one
    #     update_time = os.path.getmtime(file_path)
    #     folder_dict.update({file_path:update_time})
    # new_file = sorted(folder_dict.items(), key=lambda x:x[1], reverse=True)
    return aims_path + '\\' + new_folder_List[0]


def func_rm_sendfile_to_dir(file_path=r'D:',
                            send_file_list=[]):
    tmp_name = 'send_email_file'
    tmp_path = file_path + '\\' + tmp_name
    #    os.mkdir(tmp_path)
    if os.listdir(tmp_path) != []:
        for j in os.listdir(tmp_path):
            os.remove(tmp_path + '\\' + j)
    if os.path.exists(tmp_path):
        pass
    else:
        os.mkdir(tmp_path)
    if send_file_list == []:
        print('no file will rm, send_eamil_list = []')
    else:
        for one in send_file_list:
            shutil.copy(one, tmp_path)
    data_str = str(now)[0:10]
    send_file_email(tmp_path, data_str, email_group, email_msg_body_str,
                    title_str, cc_group)


if __name__ == '__main__':
    # 配置文件地址
    config_path = r'Y:\send_email.ini'
    # 配置文件地址 测试
    # config_path = r'D:\code\maintenance\config\send_email.ini'
    # 临时存放要发送的邮件地址
    temp_file_path = r'D:'
    # 要发送的数据地址
    log_file = r'D:\\log\\send_email_log_' + str(datetime.datetime.now())[0:10]
    f = open(log_file, 'w')
    aims_path = r'Z:\\'
    CONFIG = configparser.ConfigParser()
    CONFIG.read(config_path, encoding='utf-8')
    print(CONFIG, file=f)

    send_time = CONFIG['send_time']['start_time']
    send_time_hour = int(send_time[0:2])
    send_time_minute = int(send_time[3:5])
    email_group = CONFIG['send_to']['email_group'].split(',')
    cc_group = CONFIG['Cc_to']['Cc_group'].split(',')
    email_msg_body_str = CONFIG['send_body']['body']
    print(send_time, file=f)
    print(email_group, file=f)
    print(cc_group, file=f)
    now = datetime.datetime.now()
    weekday = now.weekday()
    title_str = '[自动发送邮件]'
    while True:
        if now.hour == send_time_hour and now.minute == send_time_minute:
            print('开始发送邮件:', file=f)

            if weekday in (1, 2, 3, 4):
                email_msg_body_str = email_msg_body_str
                send_day = now - datetime.timedelta(1)

                recent_folder = func_find_recent_folder(aims_path)

                send_list = func_mk_send_file_name(send_day, recent_folder)
                func_rm_sendfile_to_dir(file_path=temp_file_path,
                                        send_file_list=send_list)
                print('邮件发送成功', datetime.datetime.now(), file=f)

            if weekday in (0,):
                email_msg_body_str = email_msg_body_str
                send_list = []
                recent_folder = func_find_recent_folder(aims_path)
                for i in range(1, 4):
                    send_day = now - datetime.timedelta(i)
                    recent_folder = func_find_recent_folder(aims_path)
                    send_list += func_mk_send_file_name(send_day, recent_folder)
                func_rm_sendfile_to_dir(send_file_list=send_list)
                print('邮件发送成功', datetime.datetime.now(), file=f)
            break
        if (now.hour > send_time_hour) or (now.hour == send_time_hour and now.minute > send_time_minute):
            print('超过发送时间', file=f)
            break
        else:
            print('等待邮件发送时间发送:', file=f)
            time.sleep(20)
            now = datetime.datetime.now()
    f.close()