import type { SourceFile } from "ts-morph";

import type { Transformer } from "./index";

export const transformImport: Transformer = ({ sourceFile }) => {
  const importDeclarations = sourceFile.getImportDeclarations();

  for (const importDeclaration of importDeclarations) {
    const moduleSpecifier = importDeclaration.getModuleSpecifier();
    const moduleSpecifierText = moduleSpecifier.getText();
    const moduleSpecifierValue = moduleSpecifierText.slice(1, -1);

    if (moduleSpecifierValue.startsWith("@arcadia-ui/ui/")) {
      const newImportPath = moduleSpecifierValue.replace("@arcadia-ui/ui/", "@/");

      importDeclaration.setModuleSpecifier(newImportPath);

      if (!_useSemicolon(sourceFile)) {
        const newText = importDeclaration.getText().replace(";", "");
        importDeclaration.replaceWithText(newText);
      }
    }
  }

  return Promise.resolve(sourceFile);
};

function _useSemicolon(sourceFile: SourceFile) {
  const firstImport = sourceFile.getImportDeclarations()[0];
  return firstImport?.getText().endsWith(";") ?? false;
}
