from django.shortcuts import render
import requests
from django.http import HttpResponse
import json
from django.http import JsonResponse
from random import uniform

# Create your views here.


def get_users_data():
    try:
        response = requests.get(
            'http://210.56.21.197/trucking/index.php/api/getUsersData')
        response.raise_for_status()  # Raises HTTPError for bad responses
        data_send = response.json()
        data = data_send.get('response', [])

    except requests.exceptions.RequestException as e:
        print(f"Error fetching data: {e}")
        data = []  # Empty list in case of an exception

    return data


def get_user_rating_function(user_id):
    # Generate dummy rating data
    dummy_rating = round(uniform(3.0, 5.0), 1)
    return dummy_rating


def get_user_rating(request, user_id):
    user_rating = get_user_rating_function(user_id)
    return JsonResponse({'user_rating': user_rating})


def userList(request):
    print("useers")

    userData = get_users_data()

    # print(userData)

    # Separate lists for Shipper and Driver
    shipper_list = [user for user in userData if user['role'] == '1']
    driver_list = [user for user in userData if user['role'] == '3']

    # Print the results
    # print("Shipper List:")
    # print(shipper_list)
    # print("\nDriver List:")
    # print(driver_list)

    # Variables to store counts
    active_count_shipper = 0
    inactive_count_shipper = 0
    block_count_shipper = 0
    active_count_driver = 0
    inactive_count_driver = 0
    block_count_driver = 0

    # Iterate through the response data
    for user in userData:
        role = user['role']
        status = user['status']
        if role in ['1']:  # Checking if role is 1
            if status == '1':
                active_count_shipper += 1
            elif status == '2':
                inactive_count_shipper += 1
            elif status == '3':
                block_count_shipper += 1

        if role in ['3']:  # Checking if role is 3
            if status == '1':
                active_count_driver += 1
            elif status == '2':
                inactive_count_driver += 1
            elif status == '3':
                block_count_driver += 1

    # return render(request, 'user_list.html')
    return render(request, 'user_list.html', {'shipper_data_list': shipper_list, 'driver_data_list': driver_list, 'active_count_shipper': active_count_shipper, 'inactive_count_shipper': inactive_count_shipper, 'block_count_shipper': block_count_shipper, 'active_count_driver': active_count_driver, 'inactive_count_driver': inactive_count_driver, 'block_count_driver': block_count_driver})


def userRating(request):
    return render(request, 'rating.html')


def orderDetails(request):
    userId = request.GET.get('userId')
    print(userId)
    userData = get_users_data()
    user_order_details = None
    for user in userData:
        if user['id'] == userId:
            user_order_details = user.get('order_details', [])
            break

    print("User Order Details:", user_order_details)

    return render(request, 'orderDetails.html', {'user_order_details': user_order_details})


def update_user_state(request):
    if request.method == 'POST' and request.headers.get('x-requested-with') == 'XMLHttpRequest':
        try:
            # Process the POST data
            data = json.loads(request.body)
            user_id = data['user_id']
            account_state = data['account_state']

            # Make a request to the external API
            api_url = 'http://210.56.21.197/trucking/index.php/Api/updateUserState'
            payload = {
                'user_id': user_id,
                'account_state': account_state
            }
            response = requests.post(api_url, json=payload)

            # Check the response from the external API
            if response.ok:
                # API request successful
                userData = get_users_data()
                shipper_list = [
                    user for user in userData if user['role'] == '1']
                driver_list = [
                    user for user in userData if user['role'] == '3']

                # Variables to store counts
                active_count_shipper = 0
                inactive_count_shipper = 0
                block_count_shipper = 0
                active_count_driver = 0
                inactive_count_driver = 0
                block_count_driver = 0

                # Iterate through the response data
                for user in userData:
                    role = user['role']
                    status = user['status']
                    if role in ['1']:  # Checking if role is 1
                        if status == '1':
                            active_count_shipper += 1
                        elif status == '2':
                            inactive_count_shipper += 1
                        elif status == '3':
                            block_count_shipper += 1

                    if role in ['3']:  # Checking if role is 3
                        if status == '1':
                            active_count_driver += 1
                        elif status == '2':
                            inactive_count_driver += 1
                        elif status == '3':
                            block_count_driver += 1

                return JsonResponse({'status': 'success', 'shipper_data_list': shipper_list, 'driver_data_list': driver_list, 'active_count_shipper': active_count_shipper, 'inactive_count_shipper': inactive_count_shipper, 'block_count_shipper': block_count_shipper, 'active_count_driver': active_count_driver, 'inactive_count_driver': inactive_count_driver, 'block_count_driver': block_count_driver})
            else:
                # API request failed
                return JsonResponse({'status': 'failure', 'message': 'Failed to connect to external API'})
        except Exception as e:
            # Handle any exceptions
            return JsonResponse({'status': 'failure', 'message': str(e)})
    else:
        # Return a JsonResponse with an error message if the request is not valid
        return JsonResponse({'error': 'Invalid request'})


def update_active_user_state(request):
    if request.method == 'POST' and request.headers.get('x-requested-with') == 'XMLHttpRequest':
        try:
            # Process the POST data
            data = json.loads(request.body)
            user_id = data['user_id']
            account_state = data['account_state']

            # Make a request to the external API
            api_url = 'http://210.56.21.197/trucking/index.php/Api/updateUserState'
            payload = {
                'user_id': user_id,
                'account_state': account_state
            }
            response = requests.post(api_url, json=payload)

            # Check the response from the external API
            if response.ok:
                # API request successful
                userData = get_users_data()
                active_users = []

                # Iterate through the response data
                for user in userData:
                    role = user['role']
                    status = user['status']
                    if role in ['1']:  # Checking if role is either 1 or 3
                        if status == '1':
                            active_users.append(user)

                return JsonResponse({'status': 'success', 'active_users_list': active_users})
            else:
                # API request failed
                return JsonResponse({'status': 'failure', 'message': 'Failed to connect to external API'})
        except Exception as e:
            # Handle any exceptions
            return JsonResponse({'status': 'failure', 'message': str(e)})
    else:
        # Return a JsonResponse with an error message if the request is not valid
        return JsonResponse({'error': 'Invalid request'})


def update_inactive_user_state(request):
    if request.method == 'POST' and request.headers.get('x-requested-with') == 'XMLHttpRequest':
        try:
            # Process the POST data
            data = json.loads(request.body)
            user_id = data['user_id']
            account_state = data['account_state']

            # Make a request to the external API
            api_url = 'http://210.56.21.197/trucking/index.php/Api/updateUserState'
            payload = {
                'user_id': user_id,
                'account_state': account_state
            }
            response = requests.post(api_url, json=payload)

            # Check the response from the external API
            if response.ok:
                # API request successful
                userData = get_users_data()
                inactive_users = []

                # Iterate through the response data
                for user in userData:
                    role = user['role']
                    status = user['status']
                    if role in ['1']:  # Checking if role is either 1 or 3
                        if status == '2':
                            inactive_users.append(user)

                return JsonResponse({'status': 'success', 'inactive_users_data_list': inactive_users})
            else:
                # API request failed
                return JsonResponse({'status': 'failure', 'message': 'Failed to connect to external API'})
        except Exception as e:
            # Handle any exceptions
            return JsonResponse({'status': 'failure', 'message': str(e)})
    else:
        # Return a JsonResponse with an error message if the request is not valid
        return JsonResponse({'error': 'Invalid request'})


def update_block_user_state(request):
    if request.method == 'POST' and request.headers.get('x-requested-with') == 'XMLHttpRequest':
        try:
            # Process the POST data
            data = json.loads(request.body)
            user_id = data['user_id']
            account_state = data['account_state']

            # Make a request to the external API
            api_url = 'http://210.56.21.197/trucking/index.php/Api/updateUserState'
            payload = {
                'user_id': user_id,
                'account_state': account_state
            }
            response = requests.post(api_url, json=payload)

            # Check the response from the external API
            if response.ok:
                # API request successful
                userData = get_users_data()
                blocked_users = []

                # Iterate through the response data
                for user in userData:
                    role = user['role']
                    status = user['status']
                    if role in ['1']:  # Checking if role is either 1 or 3
                        if status == '3':
                            blocked_users.append(user)

                return JsonResponse({'status': 'success', 'blocked_users_data_list': blocked_users})
            else:
                # API request failed
                return JsonResponse({'status': 'failure', 'message': 'Failed to connect to external API'})
        except Exception as e:
            # Handle any exceptions
            return JsonResponse({'status': 'failure', 'message': str(e)})
    else:
        # Return a JsonResponse with an error message if the request is not valid
        return JsonResponse({'error': 'Invalid request'})


def update_active_driver_state(request):
    if request.method == 'POST' and request.headers.get('x-requested-with') == 'XMLHttpRequest':
        try:
            # Process the POST data
            data = json.loads(request.body)
            user_id = data['user_id']
            account_state = data['account_state']

            # Make a request to the external API
            api_url = 'http://210.56.21.197/trucking/index.php/Api/updateUserState'
            payload = {
                'user_id': user_id,
                'account_state': account_state
            }
            response = requests.post(api_url, json=payload)

            # Check the response from the external API
            if response.ok:
                # API request successful
                userData = get_users_data()
                active_users = []

                # Iterate through the response data
                for user in userData:
                    role = user['role']
                    status = user['status']
                    if role in ['3']:  # Checking if role is either 1 or 3
                        if status == '1':
                            active_users.append(user)

                return JsonResponse({'status': 'success', 'active_users_list': active_users})
            else:
                # API request failed
                return JsonResponse({'status': 'failure', 'message': 'Failed to connect to external API'})
        except Exception as e:
            # Handle any exceptions
            return JsonResponse({'status': 'failure', 'message': str(e)})
    else:
        # Return a JsonResponse with an error message if the request is not valid
        return JsonResponse({'error': 'Invalid request'})


def update_inactive_driver_state(request):
    if request.method == 'POST' and request.headers.get('x-requested-with') == 'XMLHttpRequest':
        try:
            # Process the POST data
            data = json.loads(request.body)
            user_id = data['user_id']
            account_state = data['account_state']

            # Make a request to the external API
            api_url = 'http://210.56.21.197/trucking/index.php/Api/updateUserState'
            payload = {
                'user_id': user_id,
                'account_state': account_state
            }
            response = requests.post(api_url, json=payload)

            # Check the response from the external API
            if response.ok:
                # API request successful
                userData = get_users_data()
                inactive_users = []

                # Iterate through the response data
                for user in userData:
                    role = user['role']
                    status = user['status']
                    if role in ['3']:  # Checking if role is either 1 or 3
                        if status == '2':
                            inactive_users.append(user)

                return JsonResponse({'status': 'success', 'inactive_users_data_list': inactive_users})
            else:
                # API request failed
                return JsonResponse({'status': 'failure', 'message': 'Failed to connect to external API'})
        except Exception as e:
            # Handle any exceptions
            return JsonResponse({'status': 'failure', 'message': str(e)})
    else:
        # Return a JsonResponse with an error message if the request is not valid
        return JsonResponse({'error': 'Invalid request'})


def update_block_driver_state(request):
    if request.method == 'POST' and request.headers.get('x-requested-with') == 'XMLHttpRequest':
        try:
            # Process the POST data
            data = json.loads(request.body)
            user_id = data['user_id']
            account_state = data['account_state']

            # Make a request to the external API
            api_url = 'http://210.56.21.197/trucking/index.php/Api/updateUserState'
            payload = {
                'user_id': user_id,
                'account_state': account_state
            }
            response = requests.post(api_url, json=payload)

            # Check the response from the external API
            if response.ok:
                # API request successful
                userData = get_users_data()
                blocked_users = []

                # Iterate through the response data
                for user in userData:
                    role = user['role']
                    status = user['status']
                    if role in ['3']:  # Checking if role is either 1 or 3
                        if status == '3':
                            blocked_users.append(user)

                return JsonResponse({'status': 'success', 'blocked_users_data_list': blocked_users})
            else:
                # API request failed
                return JsonResponse({'status': 'failure', 'message': 'Failed to connect to external API'})
        except Exception as e:
            # Handle any exceptions
            return JsonResponse({'status': 'failure', 'message': str(e)})
    else:
        # Return a JsonResponse with an error message if the request is not valid
        return JsonResponse({'error': 'Invalid request'})


def activeUser(request):

    userData = get_users_data()

    print(userData)

    active_users = []

    # Iterate through the response data
    for user in userData:
        role = user['role']
        status = user['status']
        if role in ['1']:  # Checking if role is either 1 or 3
            if status == '1':
                active_users.append(user)

    return render(request, 'ActiveUserList.html', {'active_users_list': active_users, })


def inactiveUser(request):

    userData = get_users_data()

    print(userData)

    inactive_users = []

    # Iterate through the response data
    for user in userData:
        role = user['role']
        status = user['status']
        if role in ['1']:  # Checking if role is either 1 or 3
            if status == '2':
                inactive_users.append(user)

    return render(request, 'inActiveUserList.html', {'inactive_users_list': inactive_users})


def blockedUser(request):

    userData = get_users_data()

    print(userData)

    blocked_users = []

    # Iterate through the response data
    for user in userData:
        role = user['role']
        status = user['status']
        if role in ['1']:  # Checking if role is either 1 or 3
            if status == '3':
                blocked_users.append(user)
    return render(request, 'blockedUserList.html', {'blocked_users_list': blocked_users})


def activeDrivers(request):

    userData = get_users_data()

    print(userData)

    active_users = []

    # Iterate through the response data
    for user in userData:
        role = user['role']
        status = user['status']
        if role in ['3']:  # Checking if role is either 1 or 3
            if status == '1':
                active_users.append(user)

    return render(request, 'ActiveDriverList.html', {'active_users_list': active_users, })


def inactiveDrivers(request):

    userData = get_users_data()

    print(userData)

    inactive_users = []

    # Iterate through the response data
    for user in userData:
        role = user['role']
        status = user['status']
        if role in ['3']:  # Checking if role is either 1 or 3
            if status == '2':
                inactive_users.append(user)

    return render(request, 'inActiveDriverList.html', {'inactive_users_list': inactive_users})


def blockedDrivers(request):

    userData = get_users_data()

    print(userData)

    blocked_users = []

    # Iterate through the response data
    for user in userData:
        role = user['role']
        status = user['status']
        if role in ['3']:  # Checking if role is either 1 or 3
            if status == '3':
                blocked_users.append(user)
    return render(request, 'blockedDriverList.html', {'blocked_users_list': blocked_users})
