from django.views.generic import TemplateView
from django.http import HttpResponse
from django.conf import settings
from django.urls import resolve
from _keenthemes.__init__ import KTLayout
from _keenthemes.libs.theme import KTTheme
from pprint import pprint
from django.shortcuts import render,HttpResponse,redirect
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from authentication.models import User
from django.contrib import messages
from django.contrib.auth.hashers import make_password
from customer.models import Customer
from quotation.models import Quotation

"""
This file is a view controller for multiple pages as a module.
Here you can override the page view layout.
Refer to dashboards/urls.py file for more pages.


"""

def list(request):
    return render(request,'list.html')
    
def form(request):
    #return redirect('/dashboard')
    return render(request,'form.html')
    
    
    

# @login_required 
# def create_customer(request):
#     if request.method == 'POST':
#         customer_type = request.POST.gedeft('customer_type')
#         is_individual = customer_type == 'individual'
#         email = request.POST.get('email')
        
#         user_exists = User.objects.filter(email=email).exists()
#         if user_exists:
#             messages.error(request, 'A user with this email already exists.')
#             return redirect('/create-customer')
        
#         customer = User(
#             username=email,
#             email=email,
#             role='4'
#         )
#         customer.password = make_password('beedev@123')
#         customer.save()

#         if is_individual:
#             first_name = request.POST.get('first_name')
#             last_name = request.POST.get('last_name')
            
#             individual = Customer(
#                 is_individual=True,
#                 first_name=first_name,
#                 last_name=last_name,
#                 street=request.POST.get('street'),
#                 city=request.POST.get('city'),
#                 state=request.POST.get('state'),
#                 post_code=request.POST.get('post_code'),
#                 country=request.POST.get('country'),
#                 phone1=request.POST.get('phone1'),
#                 phone2=request.POST.get('phone2'),
#                 phone3=request.POST.get('phone3'),
#                 fax=request.POST.get('fax'),
#                 email=email,
#                 website=request.POST.get('website'),
#                 contact_name=request.POST.get('contact_name'),
#                 salutation=request.POST.get('salutation'),
#                 abn=request.POST.get('abn'),
#                 customer=customer,
#                 created_by=request.user
#             )
#             individual.save()

#         else:
#             company_name = request.POST.get('company_name')
            
#             company = Customer(
#                 is_individual=False,
#                 company_name=company_name,
#                 street=request.POST.get('street'),
#                 city=request.POST.get('city'),
#                 state=request.POST.get('state'),
#                 post_code=request.POST.get('post_code'),
#                 country=request.POST.get('country'),
#                 phone1=request.POST.get('phone1'),
#                 phone2=request.POST.get('phone2'),
#                 phone3=request.POST.get('phone3'),
#                 fax=request.POST.get('fax'),
#                 email=email,
#                 website=request.POST.get('website'),
#                 contact_name=request.POST.get('contact_name'),
#                 salutation=request.POST.get('salutation'),
#                 abn=request.POST.get('abn'),
#                 customer=customer,
#                 created_by=request.user,
#                 updated_by=request.user
#             )
#             company.save()

#         messages.success(request, 'Successfully create customer')
#         return redirect('/list-customers')

#     return render(request, 'customer_create.html')

def newurlfunction(request):
    return render(request,'newurlpage.html')

# def list_customers(request):
#     customers = Customer.objects.all()
#     return render(request, 'customer_list.html', {'customers': customers})

# @login_required 
# def update_customer(request, id):
#     customer = Customer.objects.get(id=id)

#     if request.method == 'POST':
#         customer_type = request.POST.get('customer_type')
#         is_individual = customer_type == 'individual'

#         if is_individual:
#             customer.first_name = request.POST.get('first_name')
#             customer.last_name = request.POST.get('last_name')
#             # Set other individual fields
#         else:
#             customer.company_name = request.POST.get('company_name')
#             # Set other company fields
        
#         customer.street = request.POST.get('street')
#         customer.city = request.POST.get('city')
#         customer.state = request.POST.get('state')
#         customer.post_code = request.POST.get('post_code')
#         customer.country = request.POST.get('country')
#         customer.phone1 = request.POST.get('phone1')
#         customer.phone2 = request.POST.get('phone2')
#         customer.phone3 = request.POST.get('phone3')
#         customer.fax = request.POST.get('fax')
#         customer.email = request.POST.get('email')
#         customer.website = request.POST.get('website')
#         customer.contact_name = request.POST.get('contact_name')
#         customer.salutation = request.POST.get('salutation')
#         customer.abn = request.POST.get('abn')

#         customer.updated_by = request.user
#         customer.save()
#         messages.success(request, 'Successfully updated customer')
#         return redirect('/list-customers')

#     return render(request, 'customer_update.html', {'customer': customer})
          
# @login_required 
# def delete_customer(request, id):
#     customer = Customer.objects.get(id=id)
#     customer.deleted_by = request.user  # Set the deleted_by field
#     customer.soft_delete()
#     messages.success(request, 'customer has been deleted.')
#     return redirect('/list-customers')

# @login_required 
# def undelete_customer(request, id):
#     customer = Customer.objects.get(id=id)
#     customer.undelete()
#     messages.success(request, 'customer has been restore.')
#     return redirect('/list-customers')
    
    
# @login_required 
# def create_supplier(request):
#     if request.method == 'POST':
#         customer_type = request.POST.get('customer_type')
#         is_individual = customer_type == 'individual'
        
#         supplier_data = {
#             'street': request.POST.get('street'),
#             'city': request.POST.get('city'),
#             'state': request.POST.get('state'),
#             'post_code': request.POST.get('post_code'),
#             'country': request.POST.get('country'),
#             'phone1': request.POST.get('phone1'),
#             'phone2': request.POST.get('phone2'),
#             'phone3': request.POST.get('phone3'),
#             'fax': request.POST.get('fax'),
#             'email': request.POST.get('email'),
#             'website': request.POST.get('website'),
#             'contact_name': request.POST.get('contact_name'),
#             'salutation': request.POST.get('salutation'),
#             'abn': request.POST.get('abn'),
#         }

#         if is_individual:
#             first_name = request.POST.get('first_name')
#             last_name = request.POST.get('last_name')
#             individual = Supplier(
#                 is_individual=is_individual,
#                 first_name=first_name,
#                 last_name=last_name,
#                 **supplier_data,
#                 created_by=request.user,
#             )
#             individual.save()
#         else:
#             company_name = request.POST.get('company_name')
#             company = Supplier(
#                 is_individual=is_individual,
#                 company_name=company_name,
#                 **supplier_data,
#                 created_by=request.user,
#                 updated_by=request.user,
#             )
#             company.save()

#         messages.success(request, 'Successfully create supplier')
#         return redirect('/list-suppliers')

#     return render(request, 'supplier_create.html')


# def list_suppliers(request):
#     suppliers = Supplier.objects.all()
#     return render(request, 'supplier_list.html', {'suppliers': suppliers})
#     # return render(request, 'supplier_list.html', {'suppliers': suppliers})


# @login_required 
# def update_supplier(request, id):
#     supplier = Supplier.objects.get(id=id)
    
#     if request.method == 'POST':
#         customer_type = request.POST.get('customer_type')
#         is_individual = customer_type == 'individual'

#         if is_individual:
#             supplier.first_name = request.POST.get('first_name')
#             supplier.last_name = request.POST.get('last_name')
#             # Set other individual fields
#         else:
#             supplier.company_name = request.POST.get('company_name')
#             # Set other company fields
        
#         supplier.street = request.POST.get('street')
#         supplier.city = request.POST.get('city')
#         supplier.state = request.POST.get('state')
#         supplier.post_code = request.POST.get('post_code')
#         supplier.country = request.POST.get('country')
#         supplier.phone1 = request.POST.get('phone1')
#         supplier.phone2 = request.POST.get('phone2')
#         supplier.phone3 = request.POST.get('phone3')
#         supplier.fax = request.POST.get('fax')
#         supplier.email = request.POST.get('email')
#         supplier.website = request.POST.get('website')
#         supplier.contact_name = request.POST.get('contact_name')
#         supplier.salutation = request.POST.get('salutation')
#         supplier.abn = request.POST.get('abn')

#         supplier.updated_by = request.user
#         supplier.save()
#         messages.success(request,'successfully update supplier')
#         return redirect('/list-suppliers') 

#     return render(request, 'supplier_update.html', {'supplier': supplier})


# @login_required 
# def delete_supplier(request, id):
#     supplier = Supplier.objects.get(id=id)
   
#     supplier.deleted_by = request.user  # Set the deleted_by field
#     supplier.soft_delete()
#     messages.success(request, 'supplier has been deleted.')
#     return redirect('/list-suppliers')


# @login_required 
# def undelete_supplier(request, id):
#     supplier = Supplier.objects.get(id=id)
#     supplier.undelete()
#     messages.success(request, 'supplier has been restore.')
#     return redirect('/list-suppliers')

from authentication.decorators import is_admin, is_sales, is_technician, is_customer,is_superuser
from django.contrib.auth.decorators import user_passes_test    


@user_passes_test(lambda u: is_sales(u) or is_admin(u) or is_superuser(u))
@login_required
def dashboard(request):
    if 'email' in request.session:
        return redirect('/dashboard')
    else:
        return redirect('/')
          
def signout(request):
    if 'email' in request.session:
        request. session.flush()
    return redirect('/')


@method_decorator(login_required, name='dispatch')  
class DashboardsView(TemplateView):
    # Default template file
    # Refer to dashboards/urls.py file for more pages and template file
    template_name = 'pages/dashboards/index.html'
    # Predefined function
    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super().get_context_data(**kwargs)
        active_customer_count = Customer.objects.filter(deleted_by__isnull=True,is_active=True).count()

        # Filter active quotations and count them
        active_quotation_count = Quotation.objects.filter(deleted_by__isnull=True,status__gte=3).count()
        print("dddd",active_quotation_count)
        pending_quotation_count = Quotation.objects.filter(deleted_by__isnull=True,status__lte=2).count()
        
        total_quotation_count = Quotation.objects.filter(deleted_by__isnull=True).count()

        if total_quotation_count > 0:
            active_quote_percent = round((active_quotation_count / total_quotation_count) * 100)
            pending_quote_percent = round((pending_quotation_count / total_quotation_count) * 100)
        else:
            active_quote_percent = 0
            pending_quote_percent = 0
        
        
        customers=Customer.objects.filter(deleted_by__isnull=True,is_active=True)
        
        
        CUSTOM_COLORS = ['#FF5733', '#C70039', '#FFC300']
        
        
        # Add counts to the context
        context['active_customer_count'] = active_customer_count
        context['active_quotation_count'] = active_quotation_count
        context['pending_quotation_count'] = pending_quotation_count
        context['pending_quote_percent'] = pending_quote_percent
        context['customers'] = customers
        """
        # Example to get page name. Refer to dashboards/urls.py file.
        url_name = resolve(self.request.path_info).url_name
        dd(urlname)
        if url_name == 'dashboard-2':
            # Example to override settings at the runtime
            settings.KT_THEME_DIRECTION = 'rtl'
        else:
            settings.KT_THEME_DIRECTION = 'ltr'
        """

        # A function to init the global layout. It is defined in _keenthemes/__init__.py file
        context = KTLayout.init(context)

        # Include vendors and javascript files for dashboard widgets
        KTTheme.addVendors(['amcharts', 'amcharts-maps', 'amcharts-stock'])

        return context
