from django.shortcuts import render,redirect
from shapeprint_app.models import *
from django.contrib.auth import login,logout,authenticate

from datetime import date
def index(request):
    if request.user.is_superuser:
        all = list(reversed(Order.objects.all()))[:5]
        total_products = len(SubProduct.objects.all())
        todays_orders = len(Order.objects.filter(date=date.today()))
        total_users = len(User.objects.filter(is_superuser=False))
        total_orders = len(Order.objects.all())
        return render(request,"adminapp/index.html",{"all":all,"tp":total_products,"to":total_orders,"tu":total_users,"today":todays_orders})
    return redirect("adminlogin")


def clogin(request):
    if request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username,password=password)
        if user is not None:
            login(request,user)
            return redirect("adminhomepage")
    return render(request,"adminapp/login.html")

def subcategory(request):
    category = Category.objects.all()
    if request.method == "POST":
        category = Category.objects.filter(name = request.POST['category']).first()
        name = request.POST['product_name']
        image = request.FILES['img']
        try:
            description = request.POST['description']
        except:
            description = None
        try:
            top_description = request.POST['top_description']
        except:
            top_description = None
        try:
            artwork = request.POST['artwork']
        except:
            artwork = None
        try:
            u = SubProduct.objects.create(category=category,name=name,image=image,description=description,top_description=top_description,artwork=artwork)
            u.save()
            for x in request.FILES.getlist('images'):
                SubImages.objects.create(subproduct=SubProduct.objects.get(id=u.id), image=x)

        finally:
            return redirect("managesubcategory")
    context = {"category":category}
    return render(request,"adminapp/subcategory.html",context)

def managesubcategory(request):
    all = SubProduct.objects.all()
    return render(request,"adminapp/managesubcategory.html",{"all":all})

def deletesubcategory(request,id):
    if request.user.is_superuser:
        sc = SubProduct.objects.get(id=id)
        try:
            sc.delete()
        except:
            print('error')
    return redirect("managesubcategory")

def updatesubcategory(request,id):
    sp = SubProduct.objects.get(id=id)
    category = Category.objects.all()
    if request.method == "POST":
        sp.name = request.POST['product_name']
        sp.category = Category.objects.get(name = request.POST['category'])
        sp.description = request.POST['description']
        sp.top_description = request.POST['top_description']
        sp.artwork = request.POST['artwork']
        try:
            sp.image = request.FILES['img']
        except:
            print('No Image Found')
        sp.save()
        return redirect("managesubcategory")
    return render(request,"adminapp/update/updatesubcategory.html",{"sp":sp,"category":category})

def addfields(request):
    category = SubProduct.objects.all()
    if request.method == "POST":
        category = SubProduct.objects.get(name=request.POST['category'])
        field_name = request.POST['field_name']
        Product.objects.create(main_category=category,field_name=field_name)
        return redirect("managefields")
    return render(request,"adminapp/addfields.html",{"category":category})

def managefields(request):
    all = Product.objects.all()
    return render(request,"adminapp/managefields.html",{"all":all})


def deletefields(request,id):
    if request.user.is_superuser:
        p = Product.objects.get(id=id)
        p.delete()
    return redirect("managefields")

def updatefields(request,id):
    sp = Product.objects.get(id=id)
    category = Category.objects.all()
    if request.method == "POST":
        sp.main_category = Category.objects.get(name = request.POST['category'])
        sp.field_name = request.POST['field_name']
        sp.save()
        return redirect('managefields')
    return render(request,"adminapp/update/updatefields.html",{"sp":sp,"category":category})




def addvalues(request):
    product = Product.objects.all()
    if request.method == "POST":
        try:
            product = Product.objects.get(id=request.POST['product'])
            name = request.POST['name']
          
            ProductFieldValue.objects.create(field_name=product,name=name)
            return redirect("managevalues")
        except:
            return redirect("addvalues")
    return render(request,"adminapp/addvalues.html",{"product":product})

def managevalues(request):
    all = ProductFieldValue.objects.all()
    return render(request,"adminapp/managevalues.html",{"all":all})


def deletevalues(request,id):
    if request.user.is_superuser:
        p = ProductFieldValue.objects.get(id=id)
        p.delete()
    return redirect("managevalues")

def updatevalues(request,id):
    sp = ProductFieldValue.objects.get(id=id)
    if request.method == "POST":
        sp.name = request.POST['name']
        sp.save()
        return redirect('managevalues')
    return render(request,"adminapp/update/updatevalues.html",{"sp":sp})

def users(request):
    all = UserProfile.objects.all()
    return render(request,"adminapp/users.html",{"all":all})


def deleteuser(request,id):
    if request.user.is_superuser:
        u = User.objects.get(id=id)
        u.delete()
    return redirect("users")


def orders(request):
    all = list(reversed(Order.objects.all()))
    return render(request,"adminapp/orders.html",{"all":all})

def todaysorders(request):
    all = list(reversed(Order.objects.filter(date=date.today())))
    return render(request,"adminapp/todaysorders.html",{"all":all})

def vieworder(request,id):
    o = Order.objects.get(id=id)
    desc = eval(o.description)
    return render(request,"adminapp/vieworder.html",{"desc":desc.values(),"or":o})


def cag(request):
    if request.method == "POST":
        image = request.FILES['image']
        Art.objects.create(image=image)
    all = list(reversed(Art.objects.all()))
    return render(request,"adminapp/cag.html",{"all":all})


def delcag(request,id):
    if request.user.is_superuser:
        try:
            c = Art.objects.get(id=id)
            c.delete()
        finally:
            return redirect("cag")
    return redirect("cag")
    
def sub(request):
    s = list(reversed(Subscription.objects.all()))
    return render(request,"adminapp/subscription.html",{"all":s})


def delsub(request,id):
    if request.user.is_superuser:
        c = Subscription.objects.get(id=id)
        c.delete()
    return redirect("sub")


def testimonials(request):
    if request.method == "POST":
        name = request.POST['name']
        designation = request.POST['designation']
        description = request.POST['description']
        Testimonials.objects.create(name=name,designation=designation,description=description)
    all = list(reversed(Testimonials.objects.all()))
    return render(request,"adminapp/testimonials.html",{"all":all})


def deltestimonials(request,id):
    if request.user.is_superuser:
        t = Testimonials.objects.get(id=id)
        t.delete()
    return redirect("testimonials")

def updatetestimonials(request,id):
    t = Testimonials.objects.get(id=id)
   
    if request.method == "POST":
        try:
            t.name = request.POST['name']
            t.designation = request.POST['designation']
            t.description = request.POST['description']
            t.save()
        finally:
            return redirect("testimonials")
    return render(request,"adminapp/update/updatetestimonials.html",{"t":t})

def faq(request):
    if request.method == "POST":
        subproduct = SubProduct.objects.get(name=request.POST['category'])
        ques = request.POST['ques']
        answer = request.POST['answer']
        FAQ.objects.create(subproduct=subproduct,ques=ques,answer=answer)
        return redirect("managefaq")
    return render(request,"adminapp/addfaq.html",{"subproduct":SubProduct.objects.all()})

def deletefaq(request,id):
    if request.user.is_superuser:
        FAQ.objects.get(id=id).delete()
    return redirect("managefaq")

def managefaq(request):
    all = FAQ.objects.all()
    return render(request,"adminapp/managefaq.html",{"all":all})

def updatefaq(request,id):
    f = FAQ.objects.get(id=id)
    if request.method == "POST":
        f.subproduct = SubProduct.objects.get(name=request.POST['category'])
        f.ques = request.POST['ques']
        f.anwwer = request.POST['answer']
        f.save()
        return redirect("managefaq")
    return render(request,"adminapp/update/updatefaq.html",{"f":f,"subproduct":SubProduct.objects.all()})
    
def addcategory(request):
    all = Category.objects.filter()
    all_headers = Header.objects.all()
    if request.method == "POST":
        name = request.POST['name']
        dname = name.replace(" ","-")
        header = Header.objects.get(name=request.POST['header'])
        
        try:
            category = Category.objects.get(name=name)
            return render(request,"adminapp/addcategory.html",{"all":all})
        except:
            print('get going')
        image = request.FILES['image']
        description = request.POST['description']
        # if mc == "pp":
        #     ispromotional = True
        # else:
        #     ispromotional = False
        ispromotional = False
        Category.objects.create(name=name,image=image,description=description,ispromotional=ispromotional,header=header,dname=dname)
    
    return render(request,"adminapp/addcategory.html",{"all":all,"all_headers":all_headers})


def updatecategory(request,id):
    c = Category.objects.get(id=id)
    all_headers = Header.objects.all()
    if request.method == "POST":
        c.name = request.POST['name']
        c.dname = c.name.replace(' ','-')
        c.header = Header.objects.get(name=request.POST['header'])
        # if request.POST['mc'] == "pp":
        #     c.ispromotional = True
        try:
            c.image = request.FILES['image']
        except:
            print('no image')
        c.description = request.POST['description']
        c.save()
        return redirect("addcategory")
    return render(request,"adminapp/update/updatecategory.html",{"c":c,"all_headers":all_headers})

def deletecategory(request,id):
    c = Category.objects.get(id=id)
    c.delete()
    return redirect("addcategory")


def websitesection(request):
    if request.method == "POST":
        title = request.POST['title']
        price = request.POST['Price']
        subtext = request.POST['subtext']
        fortext = request.POST['fortext']
        field1 = request.POST['field1']
        value1 = request.POST['value1']
        field2 = request.POST['field2']
        value2 = request.POST['value2']
        field3 = request.POST['field3']
        value3 = request.POST['value3']
        field4 = request.POST['field4']
        value4 = request.POST['value4']
        field5 = request.POST['field5']
        value5 = request.POST['value5']
        field6 = request.POST['field6']
        value6 = request.POST['value6']
        field7 = request.POST['field7']
        value7 = request.POST['value7']
        field8 = request.POST['field8']
        value8 = request.POST['value8']
        WebsiteSection.objects.create(title=title,price=price,subtext=subtext,fortext=fortext,field1=field1,field2=field2,field3=field3,field4=field4,field5=field5,field6=field6,field7=field7,field8=field8,value1=value1,value2=value2,value3=value3,value4=value4,value5=value5,value6=value6,value7=value7,value8=value8)
        return redirect("allwebsite")
    return render(request,"adminapp/websitesection.html")

def deletewebsitesection(request,id):
    if request.user.is_superuser:
        a = WebsiteSection.objects.get(id=id)
        a.delete()
    return redirect("allwebsite")

def updatewebsitesection(request,id):
    w = WebsiteSection.objects.get(id=id)
    if request.method == "POST":
        w.title = request.POST['title']
        w.price = request.POST['Price']
        w.subtext = request.POST['subtext']
        w.fortext = request.POST['fortext']
        w.field1 = request.POST['field1']
        w.value1 = request.POST['value1']
        w.field2 = request.POST['field2']
        w.value2 = request.POST['value2']
        w.field3 = request.POST['field3']
        w.value3 = request.POST['value3']
        w.field4 = request.POST['field4']
        w.value4 = request.POST['value4']
        w.field5 = request.POST['field5']
        w.value5 = request.POST['value5']
        w.field6 = request.POST['field6']
        w.value6 = request.POST['value6']
        w.field7 = request.POST['field7']
        w.value7 = request.POST['value7']
        w.field8 = request.POST['field8']
        w.value8 = request.POST['value8']
        w.save()
        return redirect("allwebsite")
    return render(request,"adminapp/update/updatewebsitesection.html",{"w":w})
        
def allwebsite(request):
    all = WebsiteSection.objects.all()
    return render(request,"adminapp/managewebsite.html",{"all":all})

def updateorder(request,id):
    o = Order.objects.get(id=id)
    if request.method == "POST":
        o.status = request.POST['status']
        o.save()
        return redirect("orders")
    return render(request,"adminapp/update/updateorder.html",{"o":o})


def deleteorder(request,id):
    if request.user.is_superuser:
        o = Order.objects.get(id=id)
        o.delete()
    return redirect("orders")


def websitequery(request):
    all = WebsiteQuery.objects.all()
    return render(request,"adminapp/websitequery.html",{"all":all})


def deletewebsitequery(request,id):
    if request.user.is_superuser:
        a = WebsiteQuery.objects.get(id=id)
        a.delete()
    return redirect("websitequery")

def adcontact(request):
    all = Contact.objects.all()
    return render(request,"adminapp/contact.html",{"all":all})


def deletecontact(request,id):
    if request.user.is_superuser:
        a = Contact.objects.get(id=id)
        a.delete()
    return redirect("adcontact")


def managemaincategory(request):
    all = Category.objects.filter()
    return render(request,"adminapp/managemaincategory.html",{"all":all})


def addmainbanners(request):
    if request.method == "POST":
        MainBanner.objects.create(heading=request.POST['heading'],image=request.FILES['image'],text=request.POST['description'])
    all = MainBanner.objects.all()[:3]
    if len(all) >= 3:
        limit = True
    else:
        limit = False
    return render(request,"adminapp/addmainbanner.html",{"all":all,"limit":limit})

def updatemainbanners(request,id):
    u = MainBanner.objects.get(id=id)
    if request.method == "POST":
        u.heading = request.POST['heading']
        u.text = request.POST['description']
        try:
            u.image = request.FILES['image']
        except:
            print('no image found')
        u.save()
        return redirect("addmainbanners")
    return render(request,"adminapp/update/updatemainbanner.html",{"a":u})


def deletemainbanners(request,id):
    u = MainBanner.objects.get(id=id)
    if request.user.is_superuser:
        u.delete()
    return redirect("addmainbanners")

def guide(request):
    return render(request,"adminapp/guide.html")

def pricing(request):
    all = list(reversed(SubProduct.objects.all()))
    return render(request,"adminapp/pricing.html",{"all":all})


def addpricing(request,id):
    product = SubProduct.objects.filter(id=id).first()
    fields = Product.objects.filter(main_category=product)
    units = ProductFieldValue.objects.filter(field_name__main_category=product)
    if request.method == "POST":
        try:
            Price.objects.create(combination=request.POST['combination'],price=request.POST['price'],product=product)
        finally:
            return redirect("pricing")
    return render(request,"adminapp/addpricing.html",{"fields":fields,"units":units})

def managepricing(request):
    all = list(reversed(Price.objects.all()))
    return render(request,"adminapp/managepricing.html",{"all":all})

def deletepricing(request,id):
    p = Price.objects.get(id=id)
    p.delete()
    return redirect("managepricing")

def updatepricing(request,id):
    p = Price.objects.get(id=id)
    if request.method == "POST":
        p.price = request.POST['price']
        p.save()
        return redirect("managepricing")
    return render(request,"adminapp/update/updatepricing.html",{"p":p})
    
    
def addheader(request):
    if request.method == "POST":
        name = request.POST['name']
        dname = name.replace("-"," ")
        du = request.POST['du']
        try:
            image = request.FILES['image']
        except:
            image = None
        Header.objects.create(name=name,dname=dname,du=du,image=image)
    return render(request,"adminapp/addheader.html",{"all":Header.objects.all()})


def deleteheader(request,id):
    Header.objects.get(id=id).delete()
    return redirect("addheader")

def updateheader(request,id):
    h = Header.objects.get(id=id)
    if request.method == "POST":
        h.name = request.POST['name']
        h.du = request.POST['du']
        try:
            h.image = request.FILES['image']
        except:
            print('no image found')
        h.save()
        return redirect("addheader")
    return render(request,"adminapp/update/updateheader.html",{"h":h})