using System;
using System.Collections.Generic;
using System.Text;

namespace SokobanResultSearch
{
    public abstract class InitializationProvider
    {

        /// <summary>
        /// Gets the representation of the goal positions in int array.
        /// All bytes with value 1 are goal position signs.
        /// </summary>
        public abstract int[]   GetGoalPositions(byte[,] table);

        /// <summary>
        /// Initializes the start state.
        /// </summary>
        public abstract State   GetStartState(byte[,] table);

        /// <summary>
        /// Gets the table without the boxes and the player.
        /// </summary>
        public abstract int[]   GetEmptyTable(byte[,] table, short playerPosition);

        /// <summary>
        /// Gets the list of the positions from which any goal positions cannot be accessed.
        /// </summary>
        public abstract int[]   GetWrongPlaces(int[] table, int[] goalPositions);

        /// <summary>
        /// Gets the count of empty places.
        /// </summary
        public abstract int     GetEmptyPositionsCount(int[] table);

        /// <summary>
        /// Converts goal positions representation from array to string.
        /// </summary
        public abstract string ConvertGoalPositonsToString(int[] goalPositions);

        /// <summary>
        /// Gets the map of the distances without any obstacles for each goal state.
        /// </summary>
        public abstract int[, ,] GetNoObstacleDistance(int[] table, string goalPositions, int emptyPositionsCount);

    }
}
