import subprocess
from datetime import datetime
import time


def DateToNumber(date_act):
    if date_act[3:6] == 'Jan':
        date_act = date_act.replace('Jan', '01')
    elif date_act[3:6] == 'Feb':
        date_act = date_act.replace('Feb', '02')
    elif date_act[3:6] == 'Mar':
        date_act = date_act.replace('Mar', '03')
    elif date_act[3:6] == 'Apr':
        date_act = date_act.replace('Apr', '04')
    elif date_act[3:6] == 'May':
        date_act = date_act.replace('May', '05')
    elif date_act[3:6] == 'June':
        date_act = date_act.replace('June', '06')
    elif date_act[3:6] == 'Jun':
        date_act = date_act.replace('Jun', '06')
    elif date_act[3:6] == 'July':
        date_act = date_act.replace('July', '07')
    elif date_act[3:6] == 'Jul':
        date_act = date_act.replace('Jul', '07')
    elif date_act[3:6] == 'Aug':
        date_act = date_act.replace('Aug', '08')
    elif date_act[3:6] == 'Sept':
        date_act = date_act.replace('Sept', '09')
    elif date_act[3:6] == 'Sep':
        date_act = date_act.replace('Sep', '09')
    elif date_act[3:6] == 'Oct':
        date_act = date_act.replace('Oct', '10')
    elif date_act[3:6] == 'Nov':
        date_act = date_act.replace('Nov', '11')
    elif date_act[3:6] == 'Dec':
        date_act = date_act.replace('Dec', '12')
    return date_act
#######################################

start_time = datetime.now()

str_cmd_get_keys = '/opt/cellframe-node/bin/cellframe-node-cli vpn_cdb serial list'
keys = str(subprocess.run(str_cmd_get_keys, shell=True, stdout=subprocess.PIPE)).split('\\n')
all_keys = []
all_act_keys = []
all_not_act_keys = []
number_keys = []



for i in keys[1:-6]:
    one = str(i).split()
    
    if len(one) <= 6:
        all_keys.append({'key': one[0], 'activateDate': 'inactive', 'validUntil': 'inactive', 'active': one[2], 'license_lenth': 'inactive,', 'activate': 'inactive,', 'date_act': 'inactive,', 'expired': 'inactive,'})
        all_not_act_keys.append({'key': one[0], 'activateDate': 'inactive', 'validUntil': 'inactive', 'active': one[2], 'license_lenth': 'inactive,', 'activate': 'inactive,', 'date_act': 'inactive,', 'expired': 'inactive,'})
    elif len(one) == 18:
        activateDate = ((one[4])[1:-1] + ' ' + one[5] + ' ' + one[6] + ' ' + one[7] + ' ' + one[8])
        activateDate = (DateToNumber(activateDate[5:14].replace(' ', '.')) + ' ' + activateDate[15:24])[:6] + '20' + ((DateToNumber(activateDate[5:14].replace(' ', '.')) + ' ' + activateDate[15:24])[6:])
        validUntil = ((one[11])[1:-1] + ' ' + one[12] + ' ' + one[13] + ' ' + one[14] + ' ' + one[15])
        validUntil = (DateToNumber(validUntil[5:14].replace(' ', '.')) + ' ' + validUntil[15:24])[:6] + '20' + ((DateToNumber(validUntil[5:14].replace(' ', '.')) + ' ' + validUntil[15:24])[6:])
        all_keys.append({'key': one[0], 'activateDate': activateDate, 'validUntil': validUntil, 'active': one[2], 'license_lenth': 'active,', 'activate': one[17]})
    elif len(one) == 17:
        activateDate = ((one[4])[1:-1] + ' ' + one[5] + ' ' + one[6] + ' ' + one[7] + ' ' + one[8])
        activateDate = (DateToNumber(activateDate[5:14].replace(' ', '.')) + ' ' + activateDate[15:24])[:6] + '20' + ((DateToNumber(activateDate[5:14].replace(' ', '.')) + ' ' + activateDate[15:24])[6:])
        validUntil = ((one[11])[1:-1] + ' ' + one[12] + ' ' + one[13] + ' ' + one[14] + ' ' + one[15])
        validUntil = (DateToNumber(validUntil[5:14].replace(' ', '.')) + ' ' + validUntil[15:24])[:6] + '20' + ((DateToNumber(validUntil[5:14].replace(' ', '.')) + ' ' + validUntil[15:24])[6:])
        all_act_keys.append({'key': one[0], 'activateDate': activateDate, 'validUntil': validUntil, 'active': one[2], 'license_lenth': 'active,', 'activate': 'active,',})     
        all_act_keys.append({'key': one[0], 'activateDate': activateDate, 'validUntil': validUntil, 'active': one[2], 'license_lenth': 'active,', 'activate': 'active,',})     

number_keys.append({'total': ((keys[-6].split()[1])[:-1]), 'active': ((keys[-5].split()[1])[:-1]), 'infinite': ((keys[-4].split()[1])[:-1]), 'expired': ((keys[-3].split()[1])[:-2]), 'not_act_number': int((keys[-6].split()[1])[:-1]) - int((keys[-5].split()[1])[:-1]) - int((keys[-4].split()[1])[:-1]) - int((keys[-3].split()[1])[:-2]), 'all_number': ((keys[-6].split()[1])[:-1]), 'act_number': ((keys[-5].split()[1])[:-1]),})



#Sort using lambda function by date from newest to oldest
try:
    all_keys = (sorted(all_keys, key=lambda x: datetime.strptime(x['date_act'], '%d.%m.%Y %H:%M:%S',), reverse=True ))
except:
    all_keys = all_keys
try:
    all_act_keys = (sorted(all_act_keys, key=lambda x: datetime.strptime(x['date_act'], '%d.%m.%Y %H:%M:%S',), reverse=True ))
except:
    all_act_keys = all_act_keys
try:
    all_not_act_keys = (sorted(all_not_act_keys, key=lambda x: datetime.strptime(x['date_act'], '%d.%m.%Y %H:%M:%S',), reverse=True ))
except:
    all_not_act_keys = all_not_act_keys
#########################################################








#print(all_keys)
print(len(all_keys))
print(datetime.now() - start_time)

print('////////////////////////////////////')

import json




