/**
 * 리포트 관리 시스템 타입 정의
 */

// 리포트 템플릿
export interface ReportTemplate {
  template_id: string;
  template_name_kor: string;
  template_name_eng: string | null;
  template_type: string;
  is_system: string;
  thumbnail_url: string | null;
  description: string | null;
  layout_config: string | null;
  default_queries: string | null;
  use_yn: string;
  sort_order: number;
  created_at: Date;
  created_by: string | null;
  updated_at: Date | null;
  updated_by: string | null;
}

// 리포트 마스터
export interface ReportMaster {
  report_id: string;
  report_name_kor: string;
  report_name_eng: string | null;
  template_id: string | null;
  report_type: string;
  company_code: string | null;
  description: string | null;
  use_yn: string;
  created_at: Date;
  created_by: string | null;
  updated_at: Date | null;
  updated_by: string | null;
}

// 리포트 레이아웃
export interface ReportLayout {
  layout_id: string;
  report_id: string;
  canvas_width: number;
  canvas_height: number;
  page_orientation: string;
  margin_top: number;
  margin_bottom: number;
  margin_left: number;
  margin_right: number;
  components: string | null;
  created_at: Date;
  created_by: string | null;
  updated_at: Date | null;
  updated_by: string | null;
}

// 리포트 쿼리
export interface ReportQuery {
  query_id: string;
  report_id: string;
  query_name: string;
  query_type: "MASTER" | "DETAIL";
  sql_query: string;
  parameters: string[] | null;
  external_connection_id: number | null; // 외부 DB 연결 ID (NULL이면 내부 DB)
  display_order: number;
  created_at: Date;
  created_by: string | null;
  updated_at: Date | null;
  updated_by: string | null;
}

// 리포트 상세 (마스터 + 레이아웃 + 쿼리 + 연결된 메뉴)
export interface ReportDetail {
  report: ReportMaster;
  layout: ReportLayout | null;
  queries: ReportQuery[];
  menuObjids?: number[]; // 연결된 메뉴 ID 목록
}

// 리포트 목록 조회 파라미터
export interface GetReportsParams {
  page?: number;
  limit?: number;
  searchText?: string;
  reportType?: string;
  useYn?: string;
  sortBy?: string;
  sortOrder?: "ASC" | "DESC";
}

// 리포트 목록 응답
export interface GetReportsResponse {
  items: ReportMaster[];
  total: number;
  page: number;
  limit: number;
}

// 리포트 생성 요청
export interface CreateReportRequest {
  reportNameKor: string;
  reportNameEng?: string;
  templateId?: string;
  reportType: string;
  description?: string;
  companyCode?: string;
}

// 리포트 수정 요청
export interface UpdateReportRequest {
  reportNameKor?: string;
  reportNameEng?: string;
  reportType?: string;
  description?: string;
  useYn?: string;
}

// 워터마크 설정
export interface WatermarkConfig {
  enabled: boolean;
  type: "text" | "image";
  // 텍스트 워터마크
  text?: string;
  fontSize?: number;
  fontColor?: string;
  // 이미지 워터마크
  imageUrl?: string;
  // 공통 설정
  opacity: number; // 0~1
  style: "diagonal" | "center" | "tile";
  rotation?: number; // 대각선일 때 각도 (기본 -45)
}

// 페이지 설정
export interface PageConfig {
  page_id: string;
  page_name: string;
  page_order: number;
  width: number;
  height: number;
  background_color: string;
  margins: {
    top: number;
    bottom: number;
    left: number;
    right: number;
  };
  components: any[];
}

// 레이아웃 설정
export interface ReportLayoutConfig {
  pages: PageConfig[];
  watermark?: WatermarkConfig; // 전체 페이지 공유 워터마크
}

// 레이아웃 저장 요청
export interface SaveLayoutRequest {
  layoutConfig: ReportLayoutConfig;
  queries?: Array<{
    id: string;
    name: string;
    type: "MASTER" | "DETAIL";
    sqlQuery: string;
    parameters: string[];
    externalConnectionId?: number;
  }>;
  menuObjids?: number[]; // 연결할 메뉴 ID 목록
}

// 리포트-메뉴 매핑
export interface ReportMenuMapping {
  mapping_id: number;
  report_id: string;
  menu_objid: number;
  company_code: string;
  created_at: Date;
  created_by: string | null;
}

// 템플릿 목록 응답
export interface GetTemplatesResponse {
  system: ReportTemplate[];
  custom: ReportTemplate[];
}

// 템플릿 생성 요청
export interface CreateTemplateRequest {
  templateNameKor: string;
  templateNameEng?: string;
  templateType: string;
  description?: string;
  layoutConfig?: any;
  defaultQueries?: any;
}

// 컴포넌트 설정 (프론트엔드와 동기화)
export interface ComponentConfig {
  id: string;
  type: string;
  x: number;
  y: number;
  width: number;
  height: number;
  zIndex: number;
  fontSize?: number;
  fontFamily?: string;
  fontWeight?: string;
  fontColor?: string;
  backgroundColor?: string;
  borderWidth?: number;
  borderColor?: string;
  borderRadius?: number;
  textAlign?: string;
  padding?: number;
  queryId?: string;
  fieldName?: string;
  defaultValue?: string;
  format?: string;
  visible?: boolean;
  printable?: boolean;
  conditional?: string;
  locked?: boolean;
  groupId?: string;
  // 이미지 전용
  imageUrl?: string;
  objectFit?: "contain" | "cover" | "fill" | "none";
  // 구분선 전용
  orientation?: "horizontal" | "vertical";
  lineStyle?: "solid" | "dashed" | "dotted" | "double";
  lineWidth?: number;
  lineColor?: string;
  // 서명/도장 전용
  showLabel?: boolean;
  labelText?: string;
  labelPosition?: "top" | "left" | "bottom" | "right";
  showUnderline?: boolean;
  personName?: string;
  // 테이블 전용
  tableColumns?: Array<{
    field: string;
    header: string;
    width?: number;
    align?: "left" | "center" | "right";
  }>;
  headerBackgroundColor?: string;
  headerTextColor?: string;
  showBorder?: boolean;
  rowHeight?: number;
  // 페이지 번호 전용
  pageNumberFormat?: "number" | "numberTotal" | "koreanNumber";
  // 카드 컴포넌트 전용
  cardTitle?: string;
  cardItems?: Array<{
    label: string;
    value: string;
    fieldName?: string;
  }>;
  labelWidth?: number;
  showCardBorder?: boolean;
  showCardTitle?: boolean;
  titleFontSize?: number;
  labelFontSize?: number;
  valueFontSize?: number;
  titleColor?: string;
  labelColor?: string;
  valueColor?: string;
  // 계산 컴포넌트 전용
  calcItems?: Array<{
    label: string;
    value: number | string;
    operator: "+" | "-" | "x" | "÷";
    fieldName?: string;
  }>;
  resultLabel?: string;
  resultColor?: string;
  resultFontSize?: number;
  showCalcBorder?: boolean;
  numberFormat?: "none" | "comma" | "currency";
  currencySuffix?: string;
  // 바코드 컴포넌트 전용
  barcodeType?: "CODE128" | "CODE39" | "EAN13" | "EAN8" | "UPC" | "QR";
  barcodeValue?: string;
  barcodeFieldName?: string;
  showBarcodeText?: boolean;
  barcodeColor?: string;
  barcodeBackground?: string;
  barcodeMargin?: number;
  qrErrorCorrectionLevel?: "L" | "M" | "Q" | "H";
  // QR코드 다중 필드 (JSON 형식)
  qrDataFields?: Array<{
    fieldName: string;
    label: string;
  }>;
  qrUseMultiField?: boolean;
  qrIncludeAllRows?: boolean;
  // 체크박스 컴포넌트 전용
  checkboxChecked?: boolean; // 체크 상태 (고정값)
  checkboxFieldName?: string; // 쿼리 필드 바인딩 (truthy/falsy 값)
  checkboxLabel?: string; // 체크박스 옆 레이블 텍스트
  checkboxSize?: number; // 체크박스 크기 (px)
  checkboxColor?: string; // 체크 색상
  checkboxBorderColor?: string; // 테두리 색상
  checkboxLabelPosition?: "left" | "right"; // 레이블 위치
}
