import type { PackageJson } from "../types"

export const addSolanaDependencies = (packageJson: PackageJson) => {
	packageJson.dependencies["crypto-browserify"] = "^3.12.0"
	packageJson.dependencies["stream-browserify"] = "^3.0.0"
	packageJson.dependencies["process"] = "^0.11.10"
	// Add the browser field
	packageJson.browser = {
		...packageJson.browser,
		crypto: false,
	}
	// Add the solana overrides
	packageJson.overrides = {
		...(packageJson.overrides ?? {}),
		"rpc-websockets": "7.10.0",
		"@solana/web3.js": "1.91.6",
	}

	return packageJson
}

export const createConfigOverrides = () => {
	return `
const webpack = require('webpack');

module.exports = {
  webpack: (config, { buildId, dev, isServer, defaultLoaders, webpack }) => {
    config.externals.push("pino-pretty", "lokijs", "encoding");
    config.resolve.fallback = {
      ...config.resolve.fallback,
      crypto: require.resolve('crypto-browserify'),
      stream: require.resolve('stream-browserify'),
      assert: require.resolve('assert'),
      process: false,
    };
    config.plugins.push(
      new webpack.ProvidePlugin({
        Buffer: ['buffer', 'Buffer'],
        process: 'process/browser',
      })
    );

    return config;
  },
};
`
}

export const updatePackageJsonScripts = (packageJson: PackageJson) => {
	return packageJson
}

export const createNonSolanaConfig = () => {
	return `
/** @type {import('next').NextConfig} */
const nextConfig = {
  webpack: (config) => {
    config.externals.push("pino-pretty", "lokijs", "encoding");
    return config;
  },
};

module.exports = nextConfig;`
}
