import { world, system } from "@minecraft/server";
import { ConfigGeral } from "./config.js";

function getProp(player, chave) {
    return parseInt(player.getDynamicProperty(chave)) || 0;
}

function setProp(player, chave, valor) {
    player.setDynamicProperty(chave, valor);
}

function calcularCusto(dano) {
    const custo = Math.floor(dano * 0.25);
    return Math.min(500, Math.max(5, custo));
}

world.beforeEvents.itemUse.subscribe((evento) => {
    const player = evento.source;
    const item = evento.itemStack;

    if (!item) return;

    const danoDefinido = ConfigGeral.Projeteis[item.typeId];

    if (danoDefinido !== undefined) {
        const custo = calcularCusto(danoDefinido);
        const chakra = getProp(player, "chakraCarga");

        if (chakra < custo) {
    evento.cancel = true;
    system.run(() => {
        player.playSound(ConfigGeral.Sons.Erro);
        player.sendMessage(`§4§l✦────────────────────────✦`);
        player.sendMessage(`§c⚡ Chakra insuficiente! ⚡`);
        player.sendMessage(`§7Você precisa de §b${custo} §7de chakra para usar este jutsu!`);
        player.sendMessage(`§4§l✦────────────────────────✦`);
    });
        } else {
            system.run(() => {
                setProp(player, "chakraCarga", chakra - custo);
            });
        }
    }
});

world.afterEvents.projectileHitEntity.subscribe((evento) => {
    const atacante = evento.source;
    const vitima = evento.getEntityHit().entity;
    const projetil = evento.projectile;

    if (!vitima || !projetil) return;

    const dano = ConfigGeral.Projeteis[projetil.typeId];

    if (dano && dano > 0) {
        if (atacante && atacante.typeId === "minecraft:player") {
            if (atacante.id === vitima.id) return;
        }

        const opcoes = { cause: "projectile" };
        if (atacante) opcoes.damagingEntity = atacante;

        vitima.applyDamage(dano, opcoes);
    }

    const configEfeito = ConfigGeral.ProjetilEfeitos[projetil.typeId];

    if (configEfeito && configEfeito.tempo > 0) {
        const ticks = Math.floor(configEfeito.tempo * 20);
        if (ticks >= 1) {
            vitima.addEffect(configEfeito.efeito, ticks, { amplifier: configEfeito.nivel });
        }
    }
});