// 3D 필드 - 타입 정의

import { ChartDataSource } from "../../types";

// 야드 레이아웃
export interface YardLayout {
  id: number;
  name: string;
  description?: string;
  placement_count?: number;
  created_by?: string;
  created_at: string;
  updated_at: string;
}

// 데이터 소스 설정
export interface YardDataSourceConfig {
  type: "database" | "external_db" | "rest_api";

  // type === 'database' (현재 DB)
  query?: string;

  // type === 'external_db' (외부 DB)
  connectionId?: number;

  // type === 'rest_api'
  url?: string;
  method?: "GET" | "POST";
  headers?: Record<string, string>;
  queryParams?: Record<string, string>;
  body?: string;
  dataPath?: string; // 응답에서 데이터 배열 경로
}

// 데이터 바인딩 설정
export interface YardDataBinding {
  // 데이터 소스의 특정 행 선택
  selectedRowIndex?: number;

  // 필드 매핑 (데이터 소스에서 선택)
  materialNameField?: string; // 자재명이 들어있는 컬럼명
  quantityField?: string; // 수량이 들어있는 컬럼명

  // 단위는 사용자가 직접 입력
  unit: string; // 예: "EA", "BOX", "KG", "M" 등
}

// 자재 배치 정보
export interface YardPlacement {
  id: number;
  yard_layout_id: number;
  material_code?: string | null;
  material_name?: string | null;
  quantity?: number | null;
  unit?: string | null;
  position_x: number;
  position_y: number;
  position_z: number;
  size_x: number;
  size_y: number;
  size_z: number;
  color: string;
  data_source_type?: string | null;
  data_source_config?: YardDataSourceConfig | null;
  data_binding?: YardDataBinding | null;
  memo?: string | null;
  created_at?: string;
  updated_at?: string;
}

// 쿼리 결과 (데이터 바인딩용)
export interface QueryResult {
  columns: string[];
  rows: Record<string, any>[];
  totalRows: number;
}

// 요소 설정 단계
export type ConfigStep = "data-source" | "field-mapping" | "placement-settings";

// 설정 모달 props
export interface YardElementConfigPanelProps {
  placement: YardPlacement;
  onSave: (updatedPlacement: Partial<YardPlacement>) => Promise<void>;
  onCancel: () => void;
}
