import random
import time
from dspt_api.util.general.get_order_num import general_order_num
from dspt_api.util.general.handle_redis import get_data_from_redis
from dspt_api.util.general.handle_ecard import get_ecard, get_ecard_renew_fee


class ApiEcardRenew:
    def __init__(self, **kwargs):
        self.member_type = kwargs.get('member_type')
        self.api = kwargs.get('api')
        self.ip = kwargs.get('ip')
        self.env = kwargs.get('env')
        self.cid = kwargs.get('cid')
        self.pid = kwargs.get('pid')

    def get_suggestion(self):
        _now = int(time.time() * 1000)
        # ecard_number
        # 获取本地记录的联名卡
        ecard_number_result = False
        ecard_number = False
        if ecard_num := get_ecard(self.ip, self.env, self.pid, self.cid):
            ecard_number = {'param': 'ecard_number', 'value': ecard_num, 'is_checked': True, 'result': True,
                            'timestamp': _now}
            ecard_number_result = True
        else:
            request_api_ec_1 = {'name': '3.4.4 获取联名卡详情', 'path': 'ecard/detail'}
            redis_key_api_ec_1 = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api_ec_1["path"]}'
            request_api_ec_2 = {'name': '3.4.2 联名卡开卡', 'path': 'ecard/regist'}
            redis_key_api_ec_2 = f'dspt_api_{self.ip}_{self.env}_{self.member_type}_{self.pid}_{self.cid}_{request_api_ec_2["path"]}'
            result_ec_1, _format_ec_1, redis_data_ec_1, _timestamp_ec_1 = get_data_from_redis(redis_key_api_ec_1)
            result_ec_2, _format_ec_2, redis_data_ec_2, _timestamp_ec_2 = get_data_from_redis(redis_key_api_ec_2)

            if result_ec_2:
                print('redis_data_ec_2', redis_data_ec_2)
                ecard_number_ec_2 = {'param': 'ecard_number', 'value': redis_data_ec_2['ecardNumber'],
                                     'is_checked': True, 'result': True,
                                     'timestamp': _timestamp_ec_2}
                ecard_number = ecard_number_ec_2
                ecard_number_result = True
            if result_ec_1:
                ecard_number_ec_1 = {'param': 'ecard_number', 'value': redis_data_ec_1['ecardNumber'],
                                     'is_checked': True, 'result': True,
                                     'timestamp': _timestamp_ec_1}
                ecard_number = ecard_number_ec_1
                ecard_number_result = True
            if result_ec_1 and result_ec_2:
                ecard_number = ecard_number_ec_1 if _timestamp_ec_1 >= _timestamp_ec_2 else ecard_number_ec_2

        # renew_fee
        result_renew_fee = False
        if ecard_number is not False:
            fee = get_ecard_renew_fee(ecard_number['value'])
            if fee is not None:
                renew_fee = {'param': 'renew_fee', 'value': fee,
                             'is_checked': True, 'result': True,
                             'timestamp': _now}
                result_renew_fee = True
            else:
                renew_fee = {'param': 'renew_fee', 'value': '此卡级别不能续卡',
                             'is_checked': True, 'result': True,
                             'timestamp': _now}
                result_renew_fee = True

        # partner_order_no
        order_num = general_order_num('REN', self.api, self.member_type, self.ip, self.env, self.pid, self.cid)
        partner_order_no = {'param': 'partner_order_no', 'value': order_num, 'is_checked': True, 'result': True,
                            'timestamp': _now}

        if ecard_number_result and result_renew_fee:
            return [ecard_number, renew_fee, partner_order_no]
        else:
            return [{'param': 'ecard_number', 'value': redis_data_ec_1 + request_api_ec_1["name"], 'is_checked': True,
                     'result': True,
                     'timestamp': _now},
                    {'param': 'renew_fee', 'value': '请手动输入参数!', 'is_checked': True, 'result': True,
                     'timestamp': _now},
                    partner_order_no
                    ]

    def get_timestamp(self):
        return int(time.time() * 1000)