import type { Stone, StoneSizeMm, SlotPosition } from '../types/index';

/**
 * Takı çevresi ve taş boyutuna göre yuva sayısını hesaplar.
 * Formül: Math.floor(çevreCm * 10 / taşBoyutuMm)
 */
export function calculateSlotCount(
  circumferenceCm: number,
  stoneSizeMm: StoneSizeMm
): number {
  return Math.floor((circumferenceCm * 10) / stoneSizeMm);
}

/**
 * Dairesel düzende eşit aralıklı yuva pozisyonları üretir.
 * Her yuva: index, açı (radyan), x ve y koordinatları içerir.
 */
export function generateSlotPositions(
  slotCount: number,
  radius: number
): SlotPosition[] {
  const positions: SlotPosition[] = [];

  for (let i = 0; i < slotCount; i++) {
    const angle = (2 * Math.PI * i) / slotCount;
    positions.push({
      index: i,
      angle,
      x: radius * Math.cos(angle),
      y: radius * Math.sin(angle),
    });
  }

  return positions;
}

/**
 * Taşları isme göre filtreler (büyük/küçük harf duyarsız).
 * Boş sorgu tüm taşları döndürür.
 */
export function filterStones(stones: Stone[], query: string): Stone[] {
  const trimmed = query.trim();
  if (trimmed === '') return stones;

  const lowerQuery = trimmed.toLowerCase();
  return stones.filter((stone) =>
    stone.name.toLowerCase().includes(lowerQuery)
  );
}
