import type { StorybookConfig } from '@storybook/nextjs-vite';
import { dirname, join } from 'path';
import { fileURLToPath } from 'url';

/**
 * EN: This function is used to resolve the absolute path of a package.
 * It is needed in projects that use Yarn PnP or are set up within a monorepo.
 * VI: Hàm này được sử dụng để resolve đường dẫn tuyệt đối của một package.
 * Cần thiết trong các dự án sử dụng Yarn PnP hoặc được thiết lập trong monorepo.
 */
function getAbsolutePath(value: string): any {
  return dirname(fileURLToPath(import.meta.resolve(`${value}/package.json`)));
}

const config: StorybookConfig = {
  stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
  addons: [
    getAbsolutePath('@chromatic-com/storybook'),
    getAbsolutePath('@storybook/addon-vitest'),
    getAbsolutePath('@storybook/addon-a11y'),
    getAbsolutePath('@storybook/addon-docs'),
    getAbsolutePath('@storybook/addon-onboarding'),
  ],
  framework: getAbsolutePath('@storybook/nextjs-vite'),
  staticDirs: ['../public'],
  // EN: Configure path aliases for Storybook
  // VI: Cấu hình path aliases cho Storybook
  viteFinal: async (config) => {
    if (config.resolve) {
      config.resolve.alias = {
        ...config.resolve.alias,
        '@': join(__dirname, '../src'),
      };
    }
    return config;
  },
};

export default config;