"""
Services module
"""
import requests
import json
from .utils import get_jwt_token
from pyvin import VIN
from django.conf import settings
from openai import OpenAI
from .models import Car


def normalize_name(name):
    return name.replace(' ', '').replace('-', '').lower()


def decode_vin_pyvin(vin):
    vehicle = VIN(vin)

    data = {
        'Make': vehicle.Make,
        'Model': vehicle.Model,
        'ModelYear': vehicle.ModelYear,
    }
    print(data)
    return data

# vehicle-info
# c2729afb
# 6d397471920412d672af1b8a02ca52ea

# option-info
# 367974ed
# 046b0412c1b4d3f8c39ec6375d6f3030
def elm(vin):
    headers = {
        "Content-Type": "application/json",
        'app-id': 'c2729afb',
        'app-key': '6d397471920412d672af1b8a02ca52ea',
        'client-id': '94142c27-2536-47e9-8e28-9ca7728b9442',
    }
    url = 'https://vehicle-maintenance.api.elm.sa/api/v1/vehicles/vehicle-info?vin='+vin

    payload = {}
    response = requests.request("GET", url, headers=headers, data=payload)
    car_info = json.loads(response.text)
    return car_info


def get_unique_colors(api_response):
    print(api_response)
    colors = api_response.get("data", [])
    print(colors)

    unique_colors = {}
    for color in colors:
        color_name = color.get("name")
        rgb = color.get("rgb")
        if color_name not in unique_colors:
            unique_colors[color_name] = rgb

    return [{"name": name, "rgb": rgb} for name, rgb in unique_colors.items()]


def fetch_colors(car_data):

    car_colors = {
        "data": [
            {"rgb": "192, 192, 192", "name": "Silver Metallic"},
            {"rgb": "0, 0, 0", "name": "Jet Black"},
            {"rgb": "255, 255, 255", "name": "Bright White"},
            {"rgb": "128, 128, 128", "name": "Graphite Gray"},
            {"rgb": "80, 80, 80", "name": "Gunmetal Gray"},
            {"rgb": "255, 0, 0", "name": "Racing Red"},
            {"rgb": "255, 69, 0", "name": "Inferno Orange"},
            {"rgb": "0, 0, 255", "name": "Deep Blue Pearl"},
            {"rgb": "75, 0, 130", "name": "Indigo Night"},
            {"rgb": "255, 215, 0", "name": "Solar Gold"},
            {"rgb": "34, 139, 34", "name": "Emerald Green"},
            {"rgb": "60, 179, 113", "name": "Forest Mist Green"},
            {"rgb": "255, 140, 0", "name": "Burnt Amber"},
            {"rgb": "160, 82, 45", "name": "Copper Brown"},
            {"rgb": "128, 0, 0", "name": "Crimson Maroon"},
            {"rgb": "245, 245, 220", "name": "Beige Champagne"},
            {"rgb": "169, 169, 169", "name": "Shadow Gray"},
            {"rgb": "255, 250, 205", "name": "Lemon Pearl"},
            {"rgb": "220, 220, 220", "name": "Platinum Silver"},
            {"rgb": "105, 105, 105", "name": "Charcoal Metallic"},
            {"rgb": "128, 0, 128", "name": "Royal Purple"},
            {"rgb": "210, 105, 30", "name": "Sunset Bronze"},
            {"rgb": "0, 128, 128", "name": "Teal Lagoon"},
            {"rgb": "72, 61, 139", "name": "Midnight Blue"},
            {"rgb": "255, 20, 147", "name": "Blazing Pink"},
            {"rgb": "192, 57, 43", "name": "Crimson Flame"},
            {"rgb": "255, 228, 196", "name": "Cream Sand"},
            {"rgb": "112, 128, 144", "name": "Steel Gray"},
            {"rgb": "0, 100, 0", "name": "Hunter Green"},
            {"rgb": "255, 223, 0", "name": "Bright Yellow"},
            {"rgb": "85, 107, 47", "name": "Olive Metallic"},
            {"rgb": "128, 128, 0", "name": "Mustard Gold"},
            {"rgb": "139, 69, 19", "name": "Cocoa Brown"},
            {"rgb": "255, 165, 0", "name": "Tangerine Flame"},
            {"rgb": "0, 0, 139", "name": "Navy Sapphire"},
            {"rgb": "70, 130, 180", "name": "Skyline Blue"},
            {"rgb": "220, 20, 60", "name": "Crimson Passion"},
            {"rgb": "189, 183, 107", "name": "Khaki Dune"},
            {"rgb": "50, 205, 50", "name": "Lime Essence"},
            {"rgb": "139, 0, 139", "name": "Amethyst Glow"},
            {"rgb": "255, 215, 180", "name": "Rosé Gold"},
            {"rgb": "46, 139, 87", "name": "Moss Green"},
            {"rgb": "72, 209, 204", "name": "Caribbean Aqua"},
            {"rgb": "255, 240, 245", "name": "Pearl Blush"},
            {"rgb": "244, 164, 96", "name": "Sierra Sunset"},
            {"rgb": "139, 0, 0", "name": "Crimson Ruby"},
            {"rgb": "192, 192, 192", "name": "Chrome"},
            {"rgb": "255, 105, 180", "name": "Hot Magenta"},
            {"rgb": "0, 255, 255", "name": "Ice Blue"},
            {"rgb": "184, 134, 11", "name": "Golden Bronze"},
            {"rgb": "128, 128, 64", "name": "Bronze Olive"},
            {"rgb": "245, 222, 179", "name": "Wheat Cream"}
        ]
    }

    jwt_token = get_jwt_token()
    if not jwt_token:
        print("Failed to retrieve JWT token.")
        return None

    year = car_data['year']
    make = car_data['make']
    model = car_data['model']

    url = "https://carapi.app/api/exterior-colors?year={}&make={}&model={}".format(year, make, model)    
    params = {
        'limit': '1000',
        'sort': 'name',
        'direction': 'asc',
        'verbose': 'no',
        'all_trims': 'no',
    }

    headers = {
        'Accept': 'application/json',
        'Authorization': f'Bearer {jwt_token}',
    }

    try:
        response = requests.get(url, headers=headers, params=params)
        color_info = response.json()

        if not color_info["data"] == []:
            return get_unique_colors(color_info)
        else:
            return car_colors["data"]

    except requests.exceptions.RequestException as e:
        print(f"Error fetching color information: {e}")
        return None


def fetch_interior_colors(car_data):

        car_colors = {
            "data": [
                {"rgb": "0, 0, 0", "name": "Jet Black"},
                {"rgb": "54, 69, 79", "name": "Charcoal Black"},
                {"rgb": "255, 255, 255", "name": "Bright White"},
                {"rgb": "245, 245, 220", "name": "Off-White"},
                {"rgb": "210, 180, 140", "name": "Beige"},
                {"rgb": "205, 133, 63", "name": "Tan"},
                {"rgb": "128, 128, 128", "name": "Gray"},
                {"rgb": "80, 80, 80", "name": "Graphite Gray"},
                {"rgb": "112, 128, 144", "name": "Gunmetal Gray"},
                {"rgb": "192, 192, 192", "name": "Silver Metallic"},
                {"rgb": "139, 69, 19", "name": "Cognac Brown"},
                {"rgb": "149, 94, 55", "name": "Chestnut Brown"},
                {"rgb": "97, 63, 43", "name": "Espresso Brown"},
                {"rgb": "72, 40, 34", "name": "Dark Chocolate"},
                {"rgb": "139, 69, 19", "name": "Saddle Brown"},
                {"rgb": "124, 79, 58", "name": "Mocha"},
                {"rgb": "193, 154, 107", "name": "Camel Tan"},
                {"rgb": "128, 0, 32", "name": "Burgundy"},
                {"rgb": "128, 0, 0", "name": "Maroon"},
                {"rgb": "139, 0, 0", "name": "Deep Red"},
                {"rgb": "0, 0, 128", "name": "Navy Blue"},
                {"rgb": "65, 105, 225", "name": "Royal Blue"},
                {"rgb": "34, 139, 34", "name": "Forest Green"},
                {"rgb": "80, 200, 120", "name": "Emerald Green"},
                {"rgb": "255, 255, 240", "name": "Ivory"},
                {"rgb": "242, 242, 242", "name": "Pearl White"},
                {"rgb": "169, 169, 169", "name": "Stone Gray"},
                {"rgb": "112, 128, 144", "name": "Slate Gray"},
                {"rgb": "150, 111, 51", "name": "Ash Brown"},
                {"rgb": "128, 128, 0", "name": "Olive Green"},
                {"rgb": "25, 25, 112", "name": "Midnight Blue"},
                {"rgb": "72, 60, 50", "name": "Taupe"}
            ]
        }

        jwt_token = get_jwt_token()
        if not jwt_token:
            print("Failed to retrieve JWT token.")
            return None

        year = car_data['year']
        make = car_data['make']
        model = car_data['model']

        url = "https://carapi.app/api/interior-colors?year={}&make={}&model={}".format(year, make, model)
        params = {
            'limit': '100',
            'sort': 'name',
            'direction': 'asc',
            'verbose': 'no',
            'all_trims': 'no',
        }

        headers = {
            'Accept': 'application/json',
            'Authorization': f'Bearer {jwt_token}',
        }

        try:
            response = requests.get(url, headers=headers, params=params)
            color_info = response.json()

            if not color_info["data"] == []:
                return get_unique_colors(color_info)
            else:
                return car_colors["data"]

        except requests.exceptions.RequestException as e:
            print(f"Error fetching color information: {e}")
            return None



def translate(content, *args, **kwargs):
    client = OpenAI(api_key=settings.OPENAI_API_KEY)
    completion = client.chat.completions.create(
        model="gpt-4",
        messages=[
            {"role": "system", "content": "You are a translation assistant that translates English to Arabic."},
            {"role": "user", "content": content}
        ],
        temperature=0.3,
    )
    translation = completion.choices[0].message.content.strip()
    return translation


def calculate_stock_value():
    cars = Car.objects.all()
    total_value = sum(car.selling_price for car in cars)
    return total_value

