import 'dotenv/config';
import { z } from 'zod';
import {
  coverageCoreConfigNx,
  eslintCoreConfigNx,
  jsDocsCoreConfig,
  jsPackagesCoreConfig,
  lighthouseCoreConfig,
  typescriptPluginConfigNx,
} from './code-pushup.preset.js';
import type { CoreConfig } from './packages/models/src/index.js';
import { mergeConfigs } from './packages/utils/src/index.js';

// load upload configuration from environment
const envSchema = z.object({
  CP_SERVER: z.string().url(),
  CP_API_KEY: z.string().min(1),
  CP_ORGANIZATION: z.string().min(1),
  CP_PROJECT: z.string().min(1),
});
const { data: env } = await envSchema.safeParseAsync(process.env);

const config: CoreConfig = {
  ...(env && {
    upload: {
      server: env.CP_SERVER,
      apiKey: env.CP_API_KEY,
      organization: env.CP_ORGANIZATION,
      project: env.CP_PROJECT,
    },
  }),

  plugins: [],
};

export default mergeConfigs(
  config,
  await coverageCoreConfigNx(),
  await jsPackagesCoreConfig(),
  await lighthouseCoreConfig(
    'https://github.com/code-pushup/cli?tab=readme-ov-file#code-pushup-cli/',
  ),
  await typescriptPluginConfigNx({
    tsconfig: 'packages/cli/tsconfig.lib.json',
  }),
  await eslintCoreConfigNx(),
  jsDocsCoreConfig([
    'packages/**/src/**/*.ts',
    '!packages/**/node_modules',
    '!packages/**/{mocks,mock}',
    '!**/*.{spec,test}.ts',
    '!**/implementation/**',
    '!**/internal/**',
  ]),
);