#charset utf8
from django.shortcuts import render, redirect
import datetime
from cargo.models import user, shipment, requestbook
from django.core.mail import send_mail
import json
from django.http import HttpResponse
import sys

# Create your views here.


def shipInfo(request):
    if request.method == 'GET':
        today = datetime.date.today()
        shipmentInfo = shipment.objects.all().order_by('leaveDate')
        s = []
        for i in shipmentInfo:
            s.append([i.shipmentID, 'From ' + i.leaveDate.__str__() + ' To ' + i.arriveDate.__str__()])

        res = {
            'shipInfo': s,
            'status': '0'
        }

        return HttpResponse(json.dumps(res), content_type="application/json")


def signIn(request):
    if request.method == 'GET':
        #print(request.get_full_path(), file=sys.stderr)

        passwordNow = request.GET['password']
        emailNow = request.GET['email'].__str__().replace('%40', '@')

        #print(passwordNow, file=sys.stderr)
        #print(emailNow, file=sys.stderr)

        check = user.objects.get(email=emailNow)

        if (check.password == passwordNow):
            res = {
                'status': '0',
                'userid': check.userID,
                'usertype': check.userType
            }
        else:
            res = {
                'status': '1'
            }
        return HttpResponse(json.dumps(res), content_type="application/json")


def signUp(request):
    if request.method == 'POST':
        req = json.loads(request.body.decode())

        newUser = user()
        newUser.email = req.get('email').__str__()# + '@gmail.com'
        newUser.password = req.get('password')
        newUser.userName = req.get('realname')
        newUser.phoneNumber = req.get('phonenumber')
        newUser.homeAddress = req.get('address')

        check = user.objects.filter(email=newUser.email)

        if (check):
            res = {
                'status': 1,
                'msg':'email exist'
            }
            return HttpResponse(json.dumps(res), content_type="application/json")

        else:
            newUser.save()
            res = {
                'status': '0',
                'usertype': '0',
                'userid': newUser.userID,
                'msg': 'success'
            }
            return HttpResponse(json.dumps(res), content_type="application/json")
    else:
        res = {
            'status': '0',
            'msg': 'error access'
        }
        return HttpResponse(json.dumps(res), content_type="application/json")


def profile(request):
    if request.method == 'GET':
        useridNow = int(request.GET['userid'])
        userNow = user.objects.get(userID=useridNow)

        if (userNow):
            res = {
                'status': '0',
                'email': userNow.email,
                'password': userNow.password,
                'realname': userNow.userName,
                'phonenumber': userNow.phoneNumber,
                'address': userNow.homeAddress
            }
            return HttpResponse(json.dumps(res), content_type="application/json")
        else:
            res = {
                'status': '1',
                'msg': 'user not exist'
            }
            return HttpResponse(json.dumps(res), content_type="application/json")


def updateprofile(request):
    if request.method == 'POST':
        req = json.loads(request.body.decode())

        useridNow = int(req.get('userid'))
        userNow = user.objects.get(userID=useridNow)

        userNow.email = req.get('email')
        userNow.password = req.get('password')
        userNow.userName = req.get('realname')
        userNow.phoneNumber = req.get('phonenumber')
        userNow.homeAddress = req.get('address')

        userNow.save()

        res = {
            'status': '0',
            'msg': 'success'
        }
        return HttpResponse(json.dumps(res), content_type="application/json")

def displaybook(request):
    if request.method == 'GET':
        useridNow = int(request.GET['userid'])
        if (int(user.objects.get(userID=useridNow).userType) > 0):
            booklist = requestbook.objects.all()
        else:
            booklist = requestbook.objects.filter(userID_id=useridNow)

        res = []

        for i in booklist:
            select = shipment.objects.get(shipmentID=int(i.shipmentID_id))
            str = 'From ' + select.leaveDate.__str__() + ' To ' + select.arriveDate.__str__()

            res.append({
                'bookingNumber': i.bookID,
                'bookingStatus': i.status,
                'HBLNumber': i.HBL,
                'boxNumber': i.boxNumber,
                'destination': i.destination,
                'pickupAddress': i.pickup,
                'pickupDate': i.pickupDate.__str__().split(' ')[0],
                'selectDate': str,
                'optionalInformationCustomer': i.customerMessage,
                'optionalInformationShipper': i.shiperMessage,
                'cost': i.cost})

        res = {
            'booklist': res,
            'status': '0'
        }
        return HttpResponse(json.dumps(res), content_type="application/json")


def newbook(request):
    if request.method == 'POST':
        req = json.loads(request.body.decode())
        newbook = requestbook()

        newbook.boxNumber = int(req.get('boxnumber'))
        newbook.cost = newbook.boxNumber * 35
        newbook.shipmentID_id = int(req.get('shipmentid'))
        newbook.userID_id = int(req.get('userid'))
        newbook.destination = req.get('destination')
        newbook.pickup = req.get('pickupaddress')
        newbook.customerMessage = req.get('cutomermsg')
        newbook.save()

        res = {
            'status': '0',
            'msg': 'success'
        }
        return HttpResponse(json.dumps(res), content_type="application/json")


def updatebook(request):
    if request.method == 'POST':
        req = json.loads(request.body.decode())

        bookidNow = int(req.get('bookingNumber'))
        bookCur = requestbook.objects.get(bookID=bookidNow)

        bookCur.HBL = req.get('bookingHBL')
        print(bookCur.HBL, file=sys.stderr)
        bookCur.status = req.get('bookingStatus', bookCur.status)
        bookCur.pickupDate = req.get('bookingPickupDate', bookCur.pickupDate)
        bookCur.shiperMessage = req.get('bookingInformationShipper', bookCur.shiperMessage)
        userid = bookCur.userID
        bookCur.save()

        userNow = user.objects.get(userID=userid)


        send_mail('You booking have been updated.',
                  'Hi ' + userNow.userName + ',\n Your booking status have been changed, please check it.',
                  'susantoonlinecargo@gmail.com',
                  [userNow.email.__str__()],
                  fail_silently=False)

        res = {
            'status': '0',
            'msg': 'success'
        }
        return HttpResponse(json.dumps(res), content_type="application/json")