import chalk from 'chalk';
import fs from 'fs-extra';
import path from 'path';

import { findFiles } from '../utils';
import { TransformFilesContent } from './TransformFilesContent';

export class TransformFilesName extends TransformFilesContent {
  async execute() {
    const workDirectory = this.getWorkingDirectory();

    this.logSubStep(
      `🔄 find ${chalk.yellow(this.find.toString())} in files names in path ${chalk.green(
        this.overrideWorkingDirectory()
      )}/${chalk.yellow(this.filePattern)} and replace with ${chalk.magenta(this.replace)}`
    );

    const files = await findFiles(workDirectory, this.filePattern);
    await Promise.all(
      files.map((file) => {
        const fileName = path.basename(file).replace(this.find, this.replace);
        const parent = path.dirname(file);

        return fs.rename(file, path.join(parent, fileName));
      })
    );
  }
}

export function renameIOSFiles({
  find,
  replace,
}: {
  find: string;
  replace: string;
}): TransformFilesName {
  return new TransformFilesName({
    filePattern: path.join('ios', '**', `*${find}*.@(m|h)`),
    find,
    replace,
  });
}
