import * as fsSync from "node:fs";
import * as fs from "node:fs/promises";
import { ResolvedEmbeddableConfig } from "./defineConfig";

export default async (ctx: ResolvedEmbeddableConfig) => {
  await removeIfExists(ctx);

  await copyStencilConfigsToClient(ctx);

  await createComponentDir(ctx.client.componentDir);
};

export async function removeIfExists(ctx: ResolvedEmbeddableConfig) {
  const promises = [];
  if (fsSync.existsSync(ctx.client.buildDir)) {
    promises.push(fs.rm(ctx.client.buildDir, { recursive: true }));
  }
  if (fsSync.existsSync(ctx.client.tmpDir)) {
    promises.push(fs.rm(ctx.client.tmpDir, { recursive: true }));
  }
  await Promise.all(promises);
}

async function copyStencilConfigsToClient(ctx: ResolvedEmbeddableConfig) {
  await fs.cp(ctx.core.configsDir, ctx.client.buildDir, { recursive: true });
}

async function createComponentDir(dir: string) {
  await fs.mkdir(dir);
}
