import { Container, PixelText, worldToScreen } from '@rpg/engine';

/** Цель кнопки действия (от роутера): kind — для будущих иконок. */
export interface InteractTargetInfo {
    kind: string;
    label: string;
    tile: { x: number; y: number };
}

/**
 * Подпись «[E] Имя» над ближайшей целью кнопки действия. Один вью на сцену
 * (в worldRoot — масштабируется зумом камеры): позиция над тайлом цели,
 * видна только когда цель есть. Заменяет прежние подписи per-object —
 * NPC впервые получают подписи тоже.
 */
export class InteractHint {
    readonly view = new Container();
    private text: PixelText;

    constructor() {
        this.text = new PixelText({ text: '', size: 9, color: 0xd8c79a });
        this.text.anchor.set(0.5, 1);
        this.view.addChild(this.text);
        this.view.visible = false;
    }

    /** Показать цель (null — скрыть). Центр тайла переводится в px внутри worldRoot. */
    show(target: InteractTargetInfo | null): void {
        if (!target) {
            this.view.visible = false;
            return;
        }
        const c = worldToScreen(target.tile.x + 0.5, target.tile.y + 0.5);
        this.text.text = `[E] ${target.label}`;
        this.view.position.set(Math.round(c.x), Math.round(c.y) - 20);
        this.view.visible = true;
    }

    destroy(): void {
        this.view.destroy({ children: true });
    }
}