// Assets/Scripts/Services/Interfaces/IBombService.cs
using System;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using Enums;
using Models.Interfaces;
using Structs;
using UnityEngine;

namespace Services.Interfaces
{
    public interface IBombService {
        public BombSpawnRequest? PendingBombSpawn { get; }
        
        void SetLastSwap(Vector2Int from, Vector2Int to);

        void DetectBombSpawnFromLastSwap(List<Gem> currentMatches);
        List<Vector2Int> ApplyPendingBombSpawns(Action<Vector2Int, GemType, bool> spawnGem);
        UniTask<List<Vector2Int>> GetInitialBombs(List<Vector2Int> protectedPositions, List<Vector2Int> bombCandidates);
        
        UniTask DetonateChainAsync(
            IReadOnlyList<Vector2Int> initialBombs,
            Func<Vector2Int, UniTask> destroyAtAsync,
            IGameBoard gameBoard);
    }
}