export type PaperSize = 'A4' | 'Letter';
export type StyleCategory = string;

export interface DocxBorder {
  color: string;
  space: number;
  style: string; // 'single' | 'double' | 'dotted' | 'dashed'
  size: number;
}

export interface DocxStyleConfig {
  font: string;
  size: number; // in pt
  color: string;
  bold?: boolean;
  italic?: boolean;
  underline?: boolean;
  allCaps?: boolean;
  smallCaps?: boolean;
  tracking?: number; // Letter spacing
  align?: 'left' | 'center' | 'right' | 'both'; // 'both' is justify
  spacing?: { before: number; after: number; line: number };
  border?: {
    top?: DocxBorder;
    bottom?: DocxBorder;
    left?: DocxBorder;
    right?: DocxBorder;
  };
  shading?: {
    fill: string; // Hex color
    color: string; // usually 'auto'
    type: string; // usually 'clear' - maps to ShadingType
  };
}

// New unified element styling (spacing values in points)
export interface ElementStyle {
  font?: string;
  size?: number;
  color?: string;
  background?: string;
  bold?: boolean;
  italic?: boolean;
  underline?: boolean;
  allCaps?: boolean;
  align?: 'left' | 'center' | 'right' | 'both';
  spacing?: { before: number; after: number; line: number };
  indent?: number;
  padding?: number;
  border?: { color: string; width: number; style: string };
  borderTop?: { color: string; width: number; style: string };
  borderBottom?: { color: string; width: number; style: string };
  borderLeft?: { color: string; width: number; style: string };
  borderRight?: { color: string; width: number; style: string };
  bullet?: string;
  numbering?: string;
  bulletSize?: number;
}

// Extended element style for DOCX export
export type TemplateElementStyle = ElementStyle;

// Font definitions
export interface FontConfig {
  heading?: string;
  body?: string;
  code?: string;
}

// Color palette
export interface ColorPalette {
  text?: string;
  textSecondary?: string;
  background?: string;
  accent?: string;
  border?: string;
  codeBg?: string;
  blockquoteBorder?: string;
}

// Page configuration
export interface PageConfig {
  margins?: { top: number; bottom: number; left: number; right: number };
  columns?: number;
  gutter?: number;
  header?: boolean;
  footer?: boolean;
}

// Unified template structure (all Markdown elements)
export interface UnifiedTemplate {
  typography?: {
    fonts?: FontConfig;
    colors?: ColorPalette;
  };
  elements?: {
    h1?: ElementStyle;
    h2?: ElementStyle;
    h3?: ElementStyle;
    h4?: ElementStyle;
    h5?: ElementStyle;
    h6?: ElementStyle;
    p?: ElementStyle;
    blockquote?: ElementStyle;
    code?: ElementStyle;
    pre?: ElementStyle;
    ul?: ElementStyle;
    ol?: ElementStyle;
    li?: ElementStyle;
    strong?: ElementStyle;
    em?: ElementStyle;
    a?: ElementStyle;
    table?: ElementStyle;
    th?: ElementStyle;
    td?: ElementStyle;
    hr?: ElementStyle;
    img?: ElementStyle;
  };
  page?: PageConfig;
}

export interface StyleOption {
  id: string;
  name: string;
  category: StyleCategory;
  description: string;
  vibe: string;
  googleFontsImport: string;

  // New unified template structure (optional, for new templates)
  typography?: {
    fonts?: FontConfig;
    colors?: ColorPalette;
  };
  elements?: {
    h1?: ElementStyle;
    h2?: ElementStyle;
    h3?: ElementStyle;
    h4?: ElementStyle;
    h5?: ElementStyle;
    h6?: ElementStyle;
    p?: ElementStyle;
    blockquote?: ElementStyle;
    code?: ElementStyle;
    pre?: ElementStyle;
    ul?: ElementStyle;
    ol?: ElementStyle;
    li?: ElementStyle;
    strong?: ElementStyle;
    em?: ElementStyle;
    a?: ElementStyle;
    table?: ElementStyle;
    th?: ElementStyle;
    td?: ElementStyle;
    hr?: ElementStyle;
    img?: ElementStyle;
  };
  page?: PageConfig;

  // Legacy Word Export Configuration (auto-generated if unified structure provided)
  wordConfig?: {
    heading1: DocxStyleConfig;
    heading2: DocxStyleConfig;
    body: DocxStyleConfig;
    accentColor: string;
  };

  // Legacy CSS for Web Preview (auto-generated if unified structure provided)
  previewCss?: string;
}

export interface GenerationConfig {
  styleId: string;
  paperSize: PaperSize;
  content: string;
}

export enum AppState {
  UPLOAD = 'UPLOAD',
  CONFIG = 'CONFIG',
  GENERATING = 'GENERATING',
  PREVIEW = 'PREVIEW',
  ERROR = 'ERROR'
}