import os
import re
import shutil

# --- CONFIGURAÇÃO DE CAMINHOS ---
ARQUIVOS_ITEMS = [
    r"C:\Users\Administrator\Desktop\BaseReborn-main\server\resources\[ Scripts ]\ox_inventory\data\items.lua",
    r"C:\Users\Administrator\Desktop\BaseReborn-main\server\resources\[ System ]\vrp\config\Itemlist.lua",
]

ARQUIVOS_VEICULOS = [
    r"C:\Users\Administrator\Desktop\BaseReborn-main\server\resources\[ Reborn ]\will_garages_v2\Vehicles.lua",
    r"C:\Users\Administrator\Desktop\BaseReborn-main\server\resources\[ System ]\vrp\config\Vehicles.lua",
]

PASTA_ORIGEM = r"C:\xampp\htdocs\imagens"
PASTA_DESTINO_ITENS = r"C:\xampp\htdocs\items"
PASTA_DESTINO_VEICULOS = r"C:\xampp\htdocs\vehicles"


# Cria as pastas de destino se não existirem
os.makedirs(PASTA_DESTINO_ITENS, exist_ok=True)
os.makedirs(PASTA_DESTINO_VEICULOS, exist_ok=True)


def extrair_termos_itens(lista_arquivos):
    termos = set()
    for caminho in lista_arquivos:
        if not os.path.exists(caminho):
            print(f"[AVISO] Arquivo de itens não encontrado: {caminho}")
            continue

        with open(caminho, "r", encoding="utf-8", errors="ignore") as f:
            conteudo = f.read()

        # 1. Chaves dos itens: ['nome_item'] ou ["nome_item"]
        chaves = re.findall(r"\[['\"]([a-zA-Z0-9_\-]+)['\"]\]\s*=", conteudo)
        for chave in chaves:
            termos.add(chave.strip().lower())

        # 2. Imagens customizadas em items.lua: image = 'nome.png'
        imgs = re.findall(r"image\s*=\s*['\"]([^'\"]+)['\"]", conteudo)
        for img in imgs:
            nome_base, _ = os.path.splitext(img)
            termos.add(nome_base.strip().lower())

        # 3. Propriedade index em Itemlist.lua: index = 'nome'
        indexes = re.findall(r"index\s*=\s*['\"]([^'\"]+)['\"]", conteudo)
        for idx in indexes:
            termos.add(idx.strip().lower())

    return termos


def extrair_termos_veiculos(lista_arquivos):
    termos = set()
    for caminho in lista_arquivos:
        if not os.path.exists(caminho):
            print(f"[AVISO] Arquivo de veículos não encontrado: {caminho}")
            continue

        with open(caminho, "r", encoding="utf-8", errors="ignore") as f:
            conteudo = f.read()

        # 1. Chaves dos veículos: ['spawn_name'] ou ["spawn_name"]
        chaves = re.findall(r"\[['\"]([a-zA-Z0-9_\-]+)['\"]\]\s*=", conteudo)
        for chave in chaves:
            termos.add(chave.strip().lower())

        # 2. Atributos name: ['name'] = 'nome' ou name = "nome"
        names = re.findall(r"name\s*['\"]?\]?\s*=\s*['\"]([^'\"]+)['\"]", conteudo)
        for n in names:
            termos.add(n.strip().lower())

    return termos


def organizar_imagens():
    itens = extrair_termos_itens(ARQUIVOS_ITEMS)
    veiculos = extrair_termos_veiculos(ARQUIVOS_VEICULOS)

    print(f"Total de identificadores de ITENS: {len(itens)}")
    print(f"Total de identificadores de VEÍCULOS: {len(veiculos)}")

    extensoes_validas = {".png", ".jpg", ".jpeg", ".webp"}
    movidos_itens = 0
    movidos_veiculos = 0
    nao_identificados = 0

    for arquivo in os.listdir(PASTA_ORIGEM):
        caminho_arquivo = os.path.join(PASTA_ORIGEM, arquivo)

        if os.path.isfile(caminho_arquivo):
            nome_base, ext = os.path.splitext(arquivo)

            if ext.lower() in extensoes_validas:
                nome_normalizado = nome_base.strip().lower()

                # Prioridade 1: Verifica se o nome pertence à lista de itens
                if nome_normalizado in itens:
                    shutil.move(
                        caminho_arquivo,
                        os.path.join(PASTA_DESTINO_ITENS, arquivo),
                    )
                    movidos_itens += 1
                    print(f"[ITEM] -> {arquivo}")

                # Prioridade 2: Verifica se o nome pertence à lista de veículos
                elif nome_normalizado in veiculos:
                    shutil.move(
                        caminho_arquivo,
                        os.path.join(PASTA_DESTINO_VEICULOS, arquivo),
                    )
                    movidos_veiculos += 1
                    print(f"[VEÍCULO] -> {arquivo}")

                else:
                    nao_identificados += 1

    print("\n" + "=" * 50)
    print(f"Total de Itens movidos: {movidos_itens}")
    print(f"Total de Veículos movidos: {movidos_veiculos}")
    print(f"Arquivos não identificados (ficaram na pasta): {nao_identificados}")
    print("=" * 50)


if __name__ == "__main__":
    organizar_imagens()