from django.http import HttpResponse
from peoples.models import people
import json
from .serializers import FileSerializer
import os
from .utilitys import recognize_faces, add_user, encode_known_face
import uuid

def train( request,people_id):

    if request.method == 'POST':
        try:
            serializer = FileSerializer(data=request.FILES,context={'people_id': people_id})

            if serializer.is_valid():
                peopleModel = people.objects.get(pk=people_id)
                path = "training/"+str(peopleModel.id)
                if not os.path.exists(path):
                    os.makedirs(path)
                
                file = serializer.validated_data['image_1']
                train = encode_known_face(file, str(peopleModel.id))
                if(train) :
                    data = {
                        'message': "Succes train", 
                        'code': "200001",
                        'data':{
                            'id':str(peopleModel.id),
                            'name':peopleModel.name
                        }
                    }
                else :
                    data = {
                        'message': "Face not found", 
                        'code': "400002",
                        'data':{
                            'id':str(peopleModel.id),
                            'name':peopleModel.name
                        }
                    }
            return HttpResponse(json.dumps(data), content_type='application/json')
        except people.DoesNotExist:
            data = {
                'message': "People Not Found", 
                'code': "400001",
            }
            return HttpResponse(json.dumps(data), content_type='application/json')

    data = {
        'message': "People Not Found", 
        'code': "400001",
    }
    return HttpResponse(json.dumps(data), content_type='application/json')

def create_person( request, *args, **kwargs):    # Ensure the output directory exists

    if request.method == 'POST':
        primary_uuid = uuid.uuid4()
        serializer = FileSerializer(data=request.FILES,context={'people_id': primary_uuid})
        
        if serializer.is_valid():
            person = people.objects.create(id= primary_uuid, name=request.POST['name'], tolerance=0.3)
            path = "training/"+str(person.id)
            if not os.path.exists(path):
                os.makedirs(path)
            
            file = serializer.validated_data['image_1']
            add = add_user(file, person)
            if(add) :
                data = {
                    'message': "Succes create", 
                    'code': "200001",
                    'data':{
                        'id':str(person.id),
                        'name':person.name
                    }
                }
            else :
                data = {
                    'message': "Face not found", 
                    'code': "400002",
                    'data':{
                        'id':str(person.id),
                        'name':person.name
                    }
                }
            return HttpResponse(json.dumps(data), content_type='application/json')
        else:
            error_message = list(serializer.errors.values())[0][0]
            data = {
                'message': error_message, 
                'code': "400003",
            }
            return HttpResponse(json.dumps(data), content_type='application/json')
    else:
        return HttpResponse("Method not allowed", status=405)  
    
def facerecog(request, people_id):
    if request.method == 'POST':
        try:
            peopleModel = people.objects.get(pk=people_id)
            serializer = FileSerializer(data=request.FILES,context={'people_id': people_id})
            
            if serializer.is_valid():
                file = serializer.validated_data['image_1']
                #tes = recognize_faces(file, peopleModel.id, 0.3)
               # print(tes)
                tes = recognize_faces(file, peopleModel.id, peopleModel.tolerance)
                if str(tes) == str(peopleModel.id):
                    data = {
                        'message': "Image found", 
                        'code': "200001",
                        'data':{
                            'id':str(peopleModel.id),
                            'name':peopleModel.name
                        }
                    }
                    return HttpResponse(json.dumps(data), content_type='application/json')
                else :
                    data = {
                        'message': "Image not found", 
                        'code': "400002",
                    }
                    return HttpResponse(json.dumps(data), content_type='application/json')
            error_message = list(serializer.errors.values())[0][0]
            data = {
                'message': error_message, 
                'code': "400003",
            }
            return HttpResponse(json.dumps(data), content_type='application/json')
        except people.DoesNotExist:
            data = {
                'message': "People Not Found", 
                'code': "400001",
            }
            return HttpResponse(json.dumps(data), content_type='application/json')
    else:
        return HttpResponse("Method not allowed", status=405)  
    

def add_face_left(request, people_id):
    print(people_id)
    

def add_face_right(request, people_id):
    print(people_id)

def add_face_up(request, people_id):
    print(people_id)

def add_face_down(request, people_id):
    print(people_id)
