from django.shortcuts import render

from django.contrib.auth.hashers import make_password
from django.contrib.auth import logout

from django.conf import settings
from django.db import connection

from asset_management_app import models
from asset_management_app import serializers
from asset_management_app import utils

from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.generics import GenericAPIView



import pandas as pd



class assetMediaAPIView(GenericAPIView):
    Permission =[IsAuthenticated]
    def post(self,request):
        try :
            # id  =  request.user.pk
            media =  request.data["media"]
            # if not models.users.objects.filter(id =   id).exists():
            #              return Response({"statusCode": "0", "statusMessage": "Failed", "error": "Id does not exists"})
            serializer = serializers.create_asset_media_serializer(data=request.data)                 
            serializer.is_valid(raise_exception=True)                 
            serializer.save() 
            return Response({"statusCode":"1","statusMessage":"Success","data":serializer.data})
        except  Exception as e:
            return Response({"statusCode":"0","statusMessage":str(e)})
    
    def get(self,request):
        try:
            id  =  request.user.pk
            asset_id =  request.GET.get("media_id",None)
            if asset_id is not None:
                result = get_media_byid(asset_id)
                return Response({"statusCode":"1","statusMessage":"Success","data":result})
            else:
                result =  get_media_byall()
                return Response({"statusCode":"1","statusMessage":"Success","data":result})
        except  Exception as e:
            return Response({"statusCode":"0","statusMessage":str(e)})
        
    def patch(self,request):
        try:
            media_id =  request.GET.get("media_id",None)
            if models.asset_media.objects.filter(id = media_id).exists():
                    qs_user_info = models.asset_media.objects.get(id = media_id)
                    serializer_media = serializers.create_asset_media_serializer(qs_user_info, data=request.data, partial=True)
                    serializer_media.is_valid(raise_exception=True)
                    serializer_media.save()
                    return Response({"statusCode":"1","statusMessage":"success","data":serializer_media.data})
            else:
                return Response({"statusCode": "0", "statusMessage": "Failed","error":"Mismatch Id"})
        except  Exception as e:
            return Response({"statusCode":"0","statusMessage":str(e)})
    
    def delete(self,request):
        try:
            media_id =  request.GET.get("media_id",None)
            delete_db =  request.GET.get("delete_db",None)
            if delete_db is not None:
                if models.asset_media.objects.filter(id = media_id).exists():
                    qs_user_info = models.asset_media.objects.get(id = media_id)                 
                    qs_user_info.delete()
                    return Response({"statusCode": "1", "statusMessage":"Scuccess","data":"Media deleted successfully"})
                else:
                    return Response({"statusCode": "0", "statusMessage": "Failed","data":"Mismatch id"})
            else:
                    
                    if models.asset_media.objects.filter(id = media_id).exists():
                        request.data['is_deleted']  = "1"
                        qs_user_info = models.asset_media.objects.get(id = media_id)
                        serializer_media = serializers.create_asset_media_serializer(qs_user_info, data=request.data, partial=True)
                        serializer_media.is_valid(raise_exception=True)
                        serializer_media.save()
                        return Response({"statusCode": "1", "statusMessage":"Success","data": "Media deleted successfully"})
                    else:
                        return Response({"statusCode": "0", "statusMessage": "Failed","error":"Mismatch Id"})
        except  Exception as e:
            return Response({"statusCode":"0","statusMessage":str(e)})
              
                    

def dictfetchall(cursor):
    "Return all rows from a cursor as a dict"
    columns = [col[0] for col in cursor.description]
    return [ 
        dict(zip(columns, row))
        for row in cursor.fetchall()
    ]


def get_media_byid(id):
    param = {'uid':id}
    rows = []
    with connection.cursor() as cur:
        cur.execute(''' SELECT  id, asset_id, service_id, services_details_id, date, notes, media, is_active, is_deleted, created_at, updated_at 
                    FROM  asset_db.asset_management_app_asset_media where  id = %(uid)s''', param)
        rows = dictfetchall(cur)
    return rows

def get_media_byall():
    param = {}
    rows = []
    with connection.cursor() as cur:
        cur.execute(''' SELECT  id, asset_id, service_id, services_details_id, date, notes, media, is_active, is_deleted, created_at, updated_at
                    FROM asset_db.asset_management_app_asset_media ''', param)
        rows = dictfetchall(cur)
    return rows
