export const useVillageHelpers = () => {
  /**
   * Converts data-coordinates (x, y) into a chess-like UI format (e.g. A7).
   *
   * DATA CONTRACT:
   * - x: 0..4  (left → right)
   * - y: 0..6  (bottom → top)
   *
   * UI CONTRACT:
   * - rows are shown top → bottom
   * - row number = 7 - y
   */
  const formatCoordinates = (x: number, y: number): string => {
    if (
      typeof x !== 'number' ||
      typeof y !== 'number' ||
      x < 0 ||
      y < 0
    ) {
      return '';
    }

    const col = String.fromCharCode('A'.charCodeAt(0) + x);
    const row = 7 - y;

    return `${col}${row}`;
  };

  /**
   * Formats backend event messages that already contain
   * raw data-coordinates in the form "(x, y)".
   *
   * IMPORTANT:
   * - This function is PRESENTATION-ONLY
   * - It assumes (x, y) are DATA coordinates
   * - It does NOT change semantics, only visual output
   */
  const formatMessageCoordinates = (message: string): string => {
    if (!message) return '';

    return message.replace(
      /\((\d+),\s*(\d+)\)/g,
      (_match, xStr, yStr) => {
        const x = Number(xStr);
        const y = Number(yStr);

        if (Number.isNaN(x) || Number.isNaN(y)) {
          return _match;
        }

        return formatCoordinates(x, y);
      }
    );
  };

  return {
    formatCoordinates,
    formatMessageCoordinates,
  };
};
