import path from "path";
import fs from "fs";
import type { Environment } from "../createStandardBoilerplate";
import { Platformtype } from "../../models/models";

export function updatePackageJsonEngine(
  appPath: string,
  environment: Environment,
  platform: Platformtype
) {
  const packageJsonPath = path.join(appPath, "package.json");

  if (fs.existsSync(packageJsonPath)) {
    try {
      const packageData = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));

      if (
        packageData.devDependencies &&
        packageData.devDependencies["@ordino.ai/ordino-engine"]
      ) {
        let finalEngineVersion: string | undefined = undefined;

        if (platform === Platformtype.Playwright) {
          if (environment === "production") {
            finalEngineVersion = "1.0.0-pw.9";
          } else {
            finalEngineVersion = "1.0.0-staging-pw.21";
          }
        } else if (platform === Platformtype.Cypress) {
          if (environment === "production") {
            finalEngineVersion = "2.2.0-cy.6";
          } else {
            finalEngineVersion = "2.2.0-staging-cy.8";
          }
        }

        if (finalEngineVersion) {
          if (packageData.devDependencies["@ordino.ai/ordino-engine"] !== finalEngineVersion) {
            packageData.devDependencies["@ordino.ai/ordino-engine"] = finalEngineVersion;
            fs.writeFileSync(
              packageJsonPath,
              JSON.stringify(packageData, null, 2),
              "utf8"
            );
            console.log(
              `package.json @ordino.ai/ordino-engine version updated to ${finalEngineVersion} for platform: ${platform}, environment: ${environment}`
            );
          } else {
            console.log(
              `package.json @ordino.ai/ordino-engine version already ${finalEngineVersion} for platform: ${platform}, environment: ${environment}. No update needed.`
            );
          }
        } else {
          console.warn(
            `finalEngineVersion was not set for platform: ${platform}, environment: ${environment}. Engine version not updated.`
          );
        }
      }
    } catch (error) {
      console.error("Failed to update package.json engine version:", error);
    }
  } else {
    console.warn("package.json not found, skipping engine update.");
  }
}