export class Inventory {
    constructor(game) {
        this.game = game;
        this.items = {};
        this.maxSlots = 20;

        this.itemData = {
            bottle:    { name: 'Бутылка', icon: '🍾', usable: false, desc: 'Пустая бутылка. Можно сдать в магазине за 5₽.' },
            bread:     { name: 'Хлеб', icon: '🍞', usable: true, desc: 'Кусок хлеба. +20 Сытость.' },
            can:       { name: 'Консервы', icon: '🥫', usable: true, desc: '+35 Сытость.' },
            tea:       { name: 'Чай', icon: '🍵', usable: true, desc: '+20 Тепло, +5 Настроение.' },
            bandage:   { name: 'Бинт', icon: '🩹', usable: true, desc: '+25 Здоровье.' },
            clothing:  { name: 'Одежда', icon: '🧥', usable: true, desc: '+30 Тепло.' },
            newspaper: { name: 'Газета', icon: '📰', usable: true, desc: '+5 Настроение.' },
            scrap:     { name: 'Хлам', icon: '🔩', usable: false, desc: 'Для крафта и строительства.' },
            rope:      { name: 'Верёвка', icon: '🪢', usable: false, desc: 'Для крафта и строительства.' },
            medkit:    { name: 'Аптечка', icon: '💊', usable: true, desc: '+50 Здоровье.' },
            stew:      { name: 'Похлёбка', icon: '🍲', usable: true, desc: '+50 Сытость, +15 Тепло.' },
            blanket:   { name: 'Одеяло', icon: '🛏️', usable: true, desc: '+50 Тепло, +10 Настроение.' },
            harmonica: { name: 'Губная гармошка', icon: '🎵', usable: true, desc: '+20 Настроение (многоразовое).' },
            candle:    { name: 'Свеча', icon: '🕯️', usable: false, desc: 'Для крафта.' },
            // Новые предметы
            fish:      { name: 'Рыба', icon: '🐟', usable: true, desc: '+25 Сытость. Свежая рыба.' },
            apple:     { name: 'Яблоко', icon: '🍎', usable: true, desc: '+10 Сытость, +5 Здоровье.' },
            vodka:     { name: 'Водка', icon: '🍺', usable: true, desc: '+30 Тепло, -10 Здоровье, +15 Настроение.' },
            vitamins:  { name: 'Витамины', icon: '💊', usable: true, desc: '+15 Здоровье, +10 Настроение.' },
            torch:     { name: 'Факел', icon: '🔦', usable: true, desc: '+20 Тепло, +10 Настроение ночью.' },
            soap:      { name: 'Мыло', icon: '🧼', usable: true, desc: '+30 Гигиена.' },
            // Экипировка (в инвентаре до экипировки)
            eq_old_hat:     { name: 'Старая шапка', icon: '🧢', usable: false, equippable: true, eqKey: 'old_hat', desc: 'Экипировка: +5 Тепло' },
            eq_hood:        { name: 'Капюшон', icon: '🪖', usable: false, equippable: true, eqKey: 'hood', desc: 'Экипировка: +8 Тепло, +2 Защита' },
            eq_warm_hat:    { name: 'Тёплая шапка', icon: '🎩', usable: false, equippable: true, eqKey: 'warm_hat', desc: 'Экипировка: +15 Тепло, +3 Настроение' },
            eq_helmet:      { name: 'Каска', icon: '⛑️', usable: false, equippable: true, eqKey: 'helmet', desc: 'Экипировка: +8 Защита' },
            eq_old_jacket:  { name: 'Драная куртка', icon: '🧥', usable: false, equippable: true, eqKey: 'old_jacket', desc: 'Экипировка: +10 Тепло' },
            eq_coat:        { name: 'Пальто', icon: '🧥', usable: false, equippable: true, eqKey: 'coat', desc: 'Экипировка: +18 Тепло, +3 Защита' },
            eq_warm_jacket: { name: 'Тёплая куртка', icon: '🧥', usable: false, equippable: true, eqKey: 'warm_jacket', desc: 'Экипировка: +25 Тепло, +5 Защита' },
            eq_vest:        { name: 'Жилетка', icon: '🦺', usable: false, equippable: true, eqKey: 'vest', desc: 'Экипировка: +10 Защита' },
            eq_old_boots:   { name: 'Рваные ботинки', icon: '👞', usable: false, equippable: true, eqKey: 'old_boots', desc: 'Экипировка: +5 Тепло' },
            eq_boots:       { name: 'Ботинки', icon: '🥾', usable: false, equippable: true, eqKey: 'boots', desc: 'Экипировка: +10 Тепло, +3 Защита' },
            eq_warm_boots:  { name: 'Тёплые сапоги', icon: '🥾', usable: false, equippable: true, eqKey: 'warm_boots', desc: 'Экипировка: +18 Тепло' },
            eq_old_gloves:  { name: 'Дырявые перчатки', icon: '🧤', usable: false, equippable: true, eqKey: 'old_gloves', desc: 'Экипировка: +3 Тепло' },
            eq_gloves:      { name: 'Перчатки', icon: '🧤', usable: false, equippable: true, eqKey: 'gloves', desc: 'Экипировка: +8 Тепло, +2 Защита' },
            eq_warm_gloves: { name: 'Тёплые перчатки', icon: '🧤', usable: false, equippable: true, eqKey: 'warm_gloves', desc: 'Экипировка: +14 Тепло' },
            // Оружие
            eq_stick:       { name: 'Палка', icon: '🏑', usable: false, equippable: false, desc: 'Оружие: +15% шанс отбиться.' },
            eq_pipe:        { name: 'Труба', icon: '🔧', usable: false, equippable: false, desc: 'Оружие: +25% шанс отбиться.' },
        };

        // Рецепты крафта
        this.recipes = [
            {
                name: 'Аптечка',
                result: 'medkit',
                ingredients: { bandage: 2, bottle: 1 },
                desc: '2x Бинт + 1x Бутылка'
            },
            {
                name: 'Похлёбка',
                result: 'stew',
                ingredients: { can: 1, bread: 1 },
                desc: '1x Консервы + 1x Хлеб'
            },
            {
                name: 'Одеяло',
                result: 'blanket',
                ingredients: { clothing: 2, newspaper: 2 },
                desc: '2x Одежда + 2x Газета'
            },
            {
                name: 'Губная гармошка',
                result: 'harmonica',
                ingredients: { scrap: 3 },
                desc: '3x Хлам'
            },
            {
                name: 'Факел',
                result: 'torch',
                ingredients: { scrap: 1, rope: 1, candle: 1 },
                desc: '1x Хлам + 1x Верёвка + 1x Свеча'
            },
            {
                name: 'Витамины',
                result: 'vitamins',
                ingredients: { apple: 2, tea: 1 },
                desc: '2x Яблоко + 1x Чай'
            },
            {
                name: 'Мыло',
                result: 'soap',
                ingredients: { bottle: 1, scrap: 1 },
                desc: '1x Бутылка + 1x Хлам'
            },
            // Экипировка
            {
                name: 'Капюшон',
                result: 'eq_hood',
                ingredients: { clothing: 2, rope: 1 },
                desc: '2x Одежда + 1x Верёвка'
            },
            {
                name: 'Тёплая шапка',
                result: 'eq_warm_hat',
                ingredients: { clothing: 3, rope: 1 },
                desc: '3x Одежда + 1x Верёвка'
            },
            {
                name: 'Тёплая куртка',
                result: 'eq_warm_jacket',
                ingredients: { clothing: 4, rope: 2 },
                desc: '4x Одежда + 2x Верёвка'
            },
            {
                name: 'Тёплые перчатки',
                result: 'eq_warm_gloves',
                ingredients: { clothing: 2 },
                desc: '2x Одежда'
            },
            {
                name: 'Палка',
                result: 'eq_stick',
                ingredients: { scrap: 2, rope: 1 },
                desc: '2x Хлам + 1x Верёвка'
            },
            {
                name: 'Труба',
                result: 'eq_pipe',
                ingredients: { scrap: 4, rope: 1 },
                desc: '4x Хлам + 1x Верёвка'
            },
        ];
    }

    addItem(key, count = 1) {
        if (!this.items[key]) this.items[key] = 0;
        this.items[key] += count;
    }

    removeItem(key, count = 1) {
        if (!this.items[key]) return;
        this.items[key] -= count;
        if (this.items[key] <= 0) delete this.items[key];
    }

    getCount(key) {
        return this.items[key] || 0;
    }

    getAll() {
        return Object.entries(this.items).map(([key, count]) => ({
            key,
            count,
            ...this.itemData[key]
        }));
    }

    useItem(key) {
        const data = this.itemData[key];
        if (!data) return false;

        // Экипировка
        if (data.equippable) {
            this.removeItem(key, 1);
            this.game.equipment.equip(data.eqKey);
            return true;
        }

        if (!data.usable) return false;
        if (this.getCount(key) <= 0) return false;
        return this.game.player.useItem(key);
    }

    canCraft(recipe) {
        for (const [key, needed] of Object.entries(recipe.ingredients)) {
            if (this.getCount(key) < needed) return false;
        }
        return true;
    }

    craft(recipe) {
        if (!this.canCraft(recipe)) return false;

        for (const [key, needed] of Object.entries(recipe.ingredients)) {
            this.removeItem(key, needed);
        }
        this.addItem(recipe.result, 1);
        this.game.sound.playPickup();
        this.game.notify(`Создано: ${recipe.name}`, 'good');
        this.game.skills.addXP('scavenging', 3);
        this.game.questSystem.onEvent('craft_item');
        this.game.totalCrafted++;
        if (this.game.totalCrafted >= 5) {
            this.game.achievements.check('crafter');
        }
        return true;
    }

    reset() {
        this.items = {};
        this.maxSlots = 20;
    }
}
