using System.Collections.Generic;

namespace Minesweeper.Core
{
    public interface IBoardService
    {
        int Width { get; }
        int Height { get; }
        int MinesCount { get; }
        bool IsGenerated { get; }
        int OpenedSafeCellsCount { get; }
        int FlaggedCellsCount { get; }
        int SafeCellsCount { get; }
        IReadOnlyList<BoardCellData> LastChangedCells { get; }

        void InitializeEmptyBoard();
        bool GenerateAfterFirstClick(int safeX, int safeY);
        BoardActionResult OpenCell(int x, int y);
        BoardActionResult ToggleFlag(int x, int y);
        bool IsInside(int x, int y);
        bool TryGetCell(int x, int y, out BoardCellData cell);
        IReadOnlyList<BoardCellData> GetCells();
    }
}
