import path from "node:path";
import { syncIosVersioning } from "./lib/ios-version.ts";

type Mode = "check" | "write";

export function parseArgs(argv: string[]): { mode: Mode; rootDir: string } {
  let mode: Mode = "write";
  let rootDir = path.resolve(".");

  for (let index = 0; index < argv.length; index += 1) {
    const arg = argv[index];
    switch (arg) {
      case "--check": {
        mode = "check";
        break;
      }
      case "--write": {
        mode = "write";
        break;
      }
      case "--root": {
        const value = argv[index + 1];
        if (!value) {
          throw new Error("Missing value for --root.");
        }
        rootDir = path.resolve(value);
        index += 1;
        break;
      }
      case "-h":
      case "--help": {
        console.log(
          "Usage: node --import tsx scripts/ios-sync-versioning.ts [--write|--check] [--root dir]",
        );
        process.exit(0);
      }
      default: {
        throw new Error(`Unknown argument: ${arg}`);
      }
    }
  }

  return { mode, rootDir };
}

const options = parseArgs(process.argv.slice(2));
const result = syncIosVersioning({ mode: options.mode, rootDir: options.rootDir });

if (options.mode === "check") {
  process.stdout.write("iOS versioning artifacts are up to date.\n");
} else if (result.updatedPaths.length === 0) {
  process.stdout.write("iOS versioning artifacts already up to date.\n");
} else {
  process.stdout.write(
    `Updated iOS versioning artifacts:\n- ${result.updatedPaths.map((filePath) => path.relative(process.cwd(), filePath)).join("\n- ")}\n`,
  );
}
