import type { NPoint } from './effects';

/** reveal — снимает тьму (Кисть Открытия); cover — возвращает тьму (Кисть Закрытия). */
export type SceneDarknessStrokeMode = 'reveal' | 'cover';

export type SceneDarknessRevealStroke = {
  id: string;
  seed: number;
  createdAtMs: number;
  points: NPoint[];
  radiusN: number;
  /** По умолчанию reveal (старые штрихи без поля). */
  mode?: SceneDarknessStrokeMode;
};

export type SceneDarknessDraft = {
  points: NPoint[];
  radiusN: number;
  mode?: SceneDarknessStrokeMode;
};

export type SceneDarknessState = {
  revision: number;
  /** Текущая сцена помечена «Затемнить сцену» (только для изображений). */
  enabled: boolean;
  cacheKey: string | null;
  strokes: SceneDarknessRevealStroke[];
  draft: SceneDarknessDraft | null;
};

export type SceneDarknessEvent =
  | { kind: 'draft.set'; draft: SceneDarknessDraft | null }
  | { kind: 'stroke.add'; stroke: SceneDarknessRevealStroke };

export function normalizeSceneDarknessStrokeMode(raw: unknown): SceneDarknessStrokeMode {
  return raw === 'cover' ? 'cover' : 'reveal';
}
