export const TileType = {
  EMPTY: 1,
  WALL: 4,
  GRASS: 15,
  GRASS_SAPLINGS: 2,
  EMPTY_DECO: 24,
  WALL_DECO: 12,
  EXIT: 8,
  WATER: 63, // Unused but kept for safety/legacy
  DOOR_CLOSED: 5,
  DOOR_OPEN: 6
} as const;

export type TileType = typeof TileType[keyof typeof TileType];

export interface TileBehavior {
  id: TileType;
  isBlocking: boolean;
  isDestructible: boolean;
  isDestructibleByWalk?: boolean;
  blocksVision?: boolean;
  destructsTo?: TileType;
}

export const TILE_DEFINITIONS: Record<number, TileBehavior> = {
  [TileType.EMPTY]: { id: TileType.EMPTY, isBlocking: false, isDestructible: false },
  [TileType.WALL]: { id: TileType.WALL, isBlocking: true, isDestructible: false },
  [TileType.GRASS]: { id: TileType.GRASS, isBlocking: false, isDestructible: true, isDestructibleByWalk: true, blocksVision: true, destructsTo: TileType.GRASS_SAPLINGS },
  [TileType.GRASS_SAPLINGS]: { id: TileType.GRASS_SAPLINGS, isBlocking: false, isDestructible: false },
  [TileType.EMPTY_DECO]: { id: TileType.EMPTY_DECO, isBlocking: false, isDestructible: false },
  [TileType.WALL_DECO]: { id: TileType.WALL_DECO, isBlocking: true, isDestructible: false },
  [TileType.EXIT]: { id: TileType.EXIT, isBlocking: false, isDestructible: false },
  [TileType.WATER]: { id: TileType.WATER, isBlocking: true, isDestructible: false },
  [TileType.DOOR_CLOSED]: { id: TileType.DOOR_CLOSED, isBlocking: false, isDestructible: true, isDestructibleByWalk: true, blocksVision: true, destructsTo: TileType.DOOR_OPEN },
  [TileType.DOOR_OPEN]: { id: TileType.DOOR_OPEN, isBlocking: false, isDestructible: true, isDestructibleByWalk: true, blocksVision: false, destructsTo: TileType.DOOR_CLOSED }
};

export function isBlocking(tile: number): boolean {
  const def = TILE_DEFINITIONS[tile];
  return def ? def.isBlocking : false;
}

export function isDestructible(tile: number): boolean {
  const def = TILE_DEFINITIONS[tile];
  return def ? def.isDestructible : false;
}

export function isDestructibleByWalk(tile: number): boolean {
  const def = TILE_DEFINITIONS[tile];
  return def ? !!def.isDestructibleByWalk : false;
}

export function blocksSight(tile: number): boolean {
  const def = TILE_DEFINITIONS[tile];
  return def ? (def.isBlocking || !!def.blocksVision) : false;
}

export function getDestructionResult(tile: number): number | undefined {
  const def = TILE_DEFINITIONS[tile];
  return def ? def.destructsTo : undefined;
}
