export namespace AutoBeRealizeAuthorizationReplaceImport {
  export function replaceProviderImport(
    actor: string,
    content: string,
  ): string {
    let updatedContent = content;

    const actorCapitalized =
      actor.charAt(0).toUpperCase() + actor.slice(1).toLowerCase();

    const nestjsCommonPattern =
      /import\s+{\s*[^}]*\s*}\s+from\s+"@nestjs\/common";/g;
    const nestjsCommonReplacement =
      'import { ForbiddenException, UnauthorizedException } from "@nestjs/common";';

    const myGlobalPattern = /import\s+{\s*MyGlobal\s*}\s+from\s+[^;]+;/g;
    const myGlobalReplacement = 'import { MyGlobal } from "../../MyGlobal";';

    const jwtAuthorizePattern =
      /import\s+{\s*jwtAuthorize\s*}\s+from\s+[^;]+;/g;
    const jwtAuthorizeReplacement =
      'import { jwtAuthorize } from "./jwtAuthorize";';

    const payloadPattern = /import\s+{\s*\w*Payload\s*}\s+from\s+[^;]+;/g;
    const payloadReplacement = `import { ${actorCapitalized}Payload } from "../../decorators/payload/${actorCapitalized}Payload";`;

    updatedContent = updatedContent.replace(
      nestjsCommonPattern,
      nestjsCommonReplacement,
    );
    updatedContent = updatedContent.replace(
      myGlobalPattern,
      myGlobalReplacement,
    );
    updatedContent = updatedContent.replace(
      jwtAuthorizePattern,
      jwtAuthorizeReplacement,
    );
    updatedContent = updatedContent.replace(payloadPattern, payloadReplacement);

    return updatedContent;
  }

  export function replaceDecoratorImport(
    actor: string,
    content: string,
  ): string {
    let updatedContent = content;

    const actorLowercase = actor.toLowerCase();

    const authorizePattern = /import\s+{\s*\w*Authorize\s*}\s+from\s+[^;]+;/g;
    const authorizeReplacement = `import { ${actorLowercase}Authorize } from "../providers/authorize/${actorLowercase}Authorize";`;

    updatedContent = updatedContent.replace(
      authorizePattern,
      authorizeReplacement,
    );

    return updatedContent;
  }
}
