/**
 * 数据库查看器相关 API 调用。
 *
 * - fetchSchemas：获取 Schema 列表
 * - fetchTables：获取指定 Schema 下的表列表（含行数）
 * - fetchColumns：获取指定表的列定义
 * - executeQuery：执行只读 SQL 查询
 */

import { apiClient } from './client';

/** 表信息 */
export interface TableInfo {
  name: string;
  row_count: number;
}

/** 列定义 */
export interface ColumnInfo {
  name: string;
  data_type: string;
  is_nullable: boolean;
  default_value: string | null;
}

/** 查询结果 */
export interface QueryResult {
  columns: string[];
  rows: unknown[][];
  row_count: number;
}

/** 获取所有 Schema */
export async function fetchSchemas(): Promise<string[]> {
  const { data } = await apiClient.get<{ schemas: string[] }>('/db/schemas');
  return data.schemas;
}

/** 获取指定 Schema 下的表列表 */
export async function fetchTables(schema: string): Promise<TableInfo[]> {
  const { data } = await apiClient.get<{ tables: TableInfo[] }>(
    `/db/schemas/${encodeURIComponent(schema)}/tables`,
  );
  return data.tables;
}

/** 获取指定表的列定义 */
export async function fetchColumns(schema: string, table: string): Promise<ColumnInfo[]> {
  const { data } = await apiClient.get<{ columns: ColumnInfo[] }>(
    `/db/tables/${encodeURIComponent(schema)}/${encodeURIComponent(table)}/columns`,
  );
  return data.columns;
}

/** 执行只读 SQL 查询 */
export async function executeQuery(sql: string): Promise<QueryResult> {
  const { data } = await apiClient.post<QueryResult>('/db/query', { sql });
  return data;
}
