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 = () => `
const webpack = require('webpack');

module.exports = function override(config, env) {
  config.resolve.fallback = {
    ...config.resolve.fallback,
    crypto: require.resolve('crypto-browserify'),
    stream: require.resolve('stream-browserify'),
    assert: require.resolve('assert'),
    process: require.resolve('process/browser.js'),
  };
  config.plugins = [
    ...config.plugins,
    new webpack.ProvidePlugin({
      Buffer: ['buffer', 'Buffer'],
      process: 'process/browser.js',
    }),
  ];

  return config;
};
`

export const updatePackageJsonScripts = (packageJson: PackageJson) => {
	packageJson.scripts = {
		dev: "vite",
		build: "tsc -b && vite build",
		lint: "eslint .",
		preview: "vite preview",
		...packageJson.scripts,
	}
	return packageJson
}
