import type { ShapeType } from "./shapeStore";
import type { FillType, LinearGradient } from "../utils/gradient";

/** انیمیشن ورود (نمایش) شیء در viewer، مشابه PowerPoint */
export type EntranceAnimationType =
  | "none"
  | "fade"
  | "flyInLeft"
  | "flyInRight"
  | "flyInTop"
  | "flyInBottom"
  | "zoomIn"
  | "zoomOut";

export type ToolType =
  | "select"
  | "rectangle"
  | "text"
  | "image"
  | "line"
  | "arrow"
  | "sticker"
  | "document"
  | "video"
  | "audio"
  | "link"
  | "grid"
  | "group"
  | "custom-shape"
  | "pencil";

export type TableCell = {
  id: string;
  text: string;
  background: string;
  width: number;
  height: number;
};

export type TableData = {
  id: string;
  rows: number;
  cols: number;
  cellWidth: number;
  cellHeight: number;
  cells: Record<string, TableCell>;
  stroke?: string;
  strokeWidth?: number;
};

export type EditorObject = {
  id: string;
  type: ToolType;
  x: number;
  y: number;
  width?: number;
  height?: number;
  fill?: string;
  fillType?: FillType;
  gradient?: LinearGradient;
  stroke?: string;
  strokeWidth?: number;
  text?: string;
  /** حداکثر عرض باکس متن (px) برای wrap پیش‌فرض متن‌های بلند */
  textMaxWidth?: number;
  fontSize?: number;
  lineHeight?: number;
  textAlign?: "left" | "center" | "right";
  fontFamily?: string;
  fontWeight?: string;
  letterSpacing?: number;
  wordSpacing?: number;
  opacity?: number;
  imageUrl?: string;
  videoUrl?: string;
  audioUrl?: string;
  /** نام نمایشی فایل صوتی؛ فقط در ادیتور استفاده می‌شود */
  audioName?: string;
  linkUrl?: string;
  rotation?: number;
  scaleX?: number;
  scaleY?: number;
  shapeType?: ShapeType;
  borderRadius?: number;
  /** میزان بلور شکل به پیکسل (۰ = بدون بلور) */
  blur?: number;
  tableData?: TableData;
  visible?: boolean;
  isMask?: boolean;
  showMaskGuide?: boolean;
  maskId?: string;
  maskInvert?: boolean;
  groupId?: string;
  /** نحوهٔ ظاهر شدن در نمایشگر؛ پیش‌فرض بدون انیمیشن */
  entranceAnimation?: EntranceAnimationType;
  /** مدت انیمیشن ورود به میلی‌ثانیه (پیش‌فرض ۶۰۰) */
  entranceDurationMs?: number;
  /** تأخیر قبل از شروع انیمیشن ورود به میلی‌ثانیه (پیش‌فرض ۰) */
  entranceDelayMs?: number;
  /**
   * نقاط شکل چندضلعی سفارشی — آرایه تخت [x1,y1, x2,y2, …] نسبت به obj.x / obj.y.
   * همان فرمت Konva.Line.points؛ برای افزودن Bézier در آینده می‌توان controlPoints جداگانه اضافه کرد.
   */
  points?: number[];
  /** آیا شکل چندضلعی بسته است (پیش‌فرض true برای custom-shape کامل‌شده) */
  closed?: boolean;
  /** نرمی منحنی برای مسیرهای آزاد (pencil) — مقدار Konva Line.tension */
  tension?: number;
};

export type PageGuide = {
  id: string;
  orientation: "vertical" | "horizontal";
  position: number;
};

export type Page = {
  id: string;
  name: string;
  objects: EditorObject[];
  guides: PageGuide[];
  backgroundType: BackgroundType;
  backgroundColor: string;
  backgroundGradient?: LinearGradient;
  backgroundImageUrl: string;
  backgroundVideoUrl: string;
};

export type DisplayStyle = "single" | "double";
export type BackgroundType = "color" | "gradient" | "image" | "video";

export type DocumentSettings = {
  displayStyle: DisplayStyle;
  autoPlay: boolean;
  pageFlipSound: boolean;
  leftToRightFlip: boolean;
  smartGuide: boolean;
  backgroundType: BackgroundType;
  backgroundColor: string;
  backgroundGradient?: LinearGradient;
  backgroundImageUrl: string;
  backgroundVideoUrl: string;
};

/** تصویر آپلودشده در گالری کاتالوگ (مشترک بین همهٔ صفحات) */
export type GalleryItem = {
  id: string;
  url: string;
  width?: number;
  height?: number;
};
