export type EasingPreset =
  | 'linear'
  | 'ease'
  | 'ease-in'
  | 'ease-out'
  | 'ease-in-out'
  | 'cubic-bezier'
  | 'steps';

export type AnimationDirection =
  | 'normal'
  | 'reverse'
  | 'alternate'
  | 'alternate-reverse';

export type AnimationFillMode = 'none' | 'forwards' | 'backwards' | 'both';

export type PreviewElement = 'box' | 'circle' | 'text';

export type PresetCategory = 'Entrance' | 'Exit' | 'Attention' | 'Special';

export interface TransformValue {
  translateX: number; // px
  translateY: number; // px
  rotate: number;     // deg
  scaleX: number;     // ratio (1 = no scale)
  scaleY: number;     // ratio
  skewX: number;      // deg
  skewY: number;      // deg
}

export interface KeyframeProperties {
  transform?: TransformValue;
  opacity?: number;          // 0–1
  backgroundColor?: string;  // hex or 'none'
  borderRadius?: number;     // px
  blur?: number;             // px
  brightness?: number;       // ratio (1 = no change)
}

export interface Keyframe {
  id: string;
  offset: number; // 0–100
  properties: KeyframeProperties;
  easing?: string; // per-keyframe easing to next
}

export interface AnimationConfig {
  name: string;
  duration: number;                    // ms
  delay: number;                       // ms
  easing: string;                      // CSS easing string
  iterationCount: number | 'infinite';
  direction: AnimationDirection;
  fillMode: AnimationFillMode;
  keyframes: Keyframe[];
}

export interface AnimationPreset {
  id: string;
  name: string;
  category: PresetCategory;
  config: AnimationConfig;
}
