from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Details
from .models import Customer
from django.views.generic.base import RedirectView
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.db.models import Sum
from datetime import datetime, timedelta
import locale
import datetime
import time
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import numpy as np
import routeros_api

def register(request):

    return render(request, 'register.html')
##login_page
def user_login(request):
    if request.method=='POST':
        username= request.POST.get('username')
        password = request.POST.get('password')
        try:
            user = User.object.get(username=username)
        except:
            messages.add_message(request, messages.INFO, 'username or password does not exist.')

            user = authenticate(request,username=username,password=password)
            if user is not None:
                login(request, user)
                return redirect('home')

            else:
                messages.add_message(request, messages.INFO,'')

    return render(request, 'login_register.html')

###### home page ####
mydict={}
@login_required(login_url='user_login')
def home(request):
    global mydict
    try:
        connection = routeros_api.RouterOsApiPool('172.16.0.1', username='admin', password='makenadavid@com',
                                                  plaintext_login=True)
        api = connection.get_api()

        ## all active hotspot users ##
        list_address = api.get_resource('/ip/hotspot/active/')
        ## all users hotspot ##
        hotspot_users = api.get_resource('/ip/hotspot/user/')
        ## all users pppoe ##
        pppoe_users = api.get_resource('/ppp/secret/')
        ######################################
        pppoe_active = api.get_resource('/ppp/active/')
        ######################################
        all_user = hotspot_users.get()
        ###
        test =list_address.get()
        ##
        pppoe_a_all = pppoe_active.get()
        ##
        ppp_users = pppoe_users.get()
        ppp_u = pppoe_users.get()
        ##
        df=pd.DataFrame(test)
        ##
        result = len(test)
        ##
        all_users= len(all_user)
        ##
        pppoe_users = len(ppp_users)
        ##
        pppoe_a_all = len(pppoe_a_all)
        ##################################data_all statics ##################################################
        ##DATABASE##objects.aggregate(Sum('price'))

        trans=Details.objects.aggregate(Sum('amount'))
        for amount in trans:
            num = trans['amount__sum']
            if(num):
                all = '{:,}'.format(num)
                ########################################this only a test ###########################
                list_2 = api.get_resource("/interface")
                test2 = list_2.get()
                for c in test2:
                    if c["name"]=="WAN-1":
                        wan=c["rx-byte"]
                    UNITS_MAPPING = [
                        (1 << 50, ' PB'),
                        (1 << 40, ' TB'),
                        (1 << 30, ' GB'),
                        (1 << 20, ' MB'),
                        (1 << 10, ' KB'),
                        (1, (' byte', ' bytes')),
                    ]

                    def pretty_size(bytes, units=UNITS_MAPPING):
                        for factor, suffix in units:
                            if bytes >= factor:
                                break
                        amo = int(bytes / factor)

                        if isinstance(suffix, tuple):
                            singular, multiple = suffix
                            if amo == 1:
                                suffix = singular
                            else:
                                suffix = multiple
                        return str(amo) + suffix
                    giga = pretty_size(int(wan))

                    mydict = {
                        "giga": giga,
                        "df": test,
                        "result": result,
                        "all_users": all_users,
                        "pppoe_users": pppoe_users,
                        "pppoe_a_all": pppoe_a_all,
                        "all": all,

                    }

            else:
                num = 0
                all = '{:,}'.format(num)
                mydict={
                    "df":test,
                    "result": result,
                    "all_users":all_users,
                    "pppoe_users":  pppoe_users,
                    "pppoe_a_all":  pppoe_a_all,
                    "all":all,
                    "giga": giga,

                }
    except routeros_api.exceptions.RouterOsApiConnectionError:
        messages.add_message(request, messages.INFO, 'No connection could be made because the target machine actively refused it.')


    return render(request,'index.html', context=mydict)
##
@login_required(login_url='user_login')
##
def user_list(request):
    try:
        connection = routeros_api.RouterOsApiPool('172.16.0.1', username='admin', password='makenadavid@com',plaintext_login=True)
        api = connection.get_api()
        list_users_pppoe = api.get_resource('/ppp/secret/')
        list_users=list_users_pppoe.get()

        all = len(list_users)
        users = {
           "all": all,
            "df" :list_users,
        }
    except routeros_api.exceptions.RouterOsApiConnectionError:
        messages.add_message(request, messages.INFO, 'No connection could be made because the target machine actively refused it.')

    return render(request, 'app-user-list.html', context=users)
@login_required(login_url='user_login')
def navbar(request):
    ##
    return render(request, 'navbar.html')
@login_required(login_url='user_login')
def sales(request):
    ##
    sale=Customer.objects.all()
    #print(sale)
    all={
        "sale":sale
    }
    return render(request, 'sales.html', context=all)
def view_customers(request):
    ##
    return render(request, 'app-user-view-billing.html')

def delete_user(request):
    connection = routeros_api.RouterOsApiPool('172.16.0.1', username='admin', password='makenadavid@com',
                                              plaintext_login=True)
    api = connection.get_api()

    ## all active hotspot users ##
    list_address = api.get_resource('/ip/hotspot/active/')
    user = list_address.get()
    for delet in user:
        p= delet["user"]
        pk= delet["id"]
        #list_address.remove(id=delet["id"])
        all_del={
            "p":p,
            "pk":pk,

        }

        return render(request, 'delete.html', context=all_del)
#analytics
def analytics(request):
    ##
    return render(request, 'analytics.html')

