import { mkdir } from "fs/promises"; import { join } from "path"; import type { GitforestConfig } from "../types/index.ts"; import { saveConfig, getDefaultConfigPath } from "./loader.ts"; export interface CreateOnboardingConfigOptions { directories: Array<{ path: string; maxDepth: number; label?: string }>; githubAuth?: { authenticated: boolean; user?: string; }; } /** * Create a config file from onboarding wizard state */ export async function createOnboardingConfig( options: CreateOnboardingConfigOptions ): Promise { const { directories } = options; // Validate at least one directory if (directories.length === 0) { throw new Error("At least one directory is required"); } // Create config object with defaults const config: GitforestConfig = { directories: directories.map((dir) => ({ path: dir.path, maxDepth: dir.maxDepth, label: dir.label, })), scan: { ignore: ["node_modules", ".git", "vendor", "__pycache__", "target", "dist", "build"], includeHidden: false, concurrency: 5, }, github: { defaultVisibility: "private", }, display: { showSubmodules: true, showNonGitProjects: true, sortBy: "status", sortDirection: "desc", }, cache: { ttlSeconds: 300, githubTtlSeconds: 600, enableBackgroundRefresh: true, backgroundRefreshIntervalSeconds: 300, }, commands: [], }; // Ensure config directory exists const configPath = getDefaultConfigPath(); const configDir = join(configPath, ".."); await mkdir(configDir, { recursive: true }); // Save config await saveConfig(config, configPath); return config; }