import packageInfo from '../../package.json';

/**
 * Release notes shown in the "What's new" dialog. This is the single source of
 * truth for the changelog: add a new entry at the top of `changelog` whenever
 * the version in package.json is bumped, and the dialog will surface it once per
 * user on their next login (see $lib/whats-new and WhatsNewDialog.svelte).
 */
export type ChangelogEntry = {
  version: string;
  /** ISO date (YYYY-MM-DD) the version shipped. */
  date: string;
  highlights: string[];
};

/** The running app version, read straight from package.json at build time. */
export const APP_VERSION: string = packageInfo.version;

export const changelog: ChangelogEntry[] = [
  {
    version: '0.1.22',
    date: '2026-06-15',
    highlights: [
      'Web App - Throughput module is now live.'
    ]
  },
  {
    version: '0.1.20',
    date: '2026-06-13',
    highlights: [
      'App - Improvements',
      'App - Bug fixes'
    ]
  },
  {
    version: '0.1.18',
    date: '2026-06-12',
    highlights: [
      'App - Improvements',
      'App - Bug fixes'
    ]
  },
  {
    version: '0.1.17',
    date: '2026-06-12',
    highlights: [
      'App - Improvements',
      'App - Mix Calculator bug fixes'
    ]
  },
  {
    version: '0.1.14',
    date: '2026-06-11',
    highlights: [
      'Web App: Improved mix calculator',
      'Web App: Improved design'
    ]
  },
  {
    version: '0.1.12',
    date: '2026-06-10',
    highlights: [
      'Mix Calculator: Changed from selecting Product to Mix.',
      'Web app design improved',
      'Throughput tab ready for testing', 
      'Costing Editor tab ready for testing'
    ]
  }
];

/** The changelog entry matching a specific version, if one exists. */
export function changelogFor(version: string): ChangelogEntry | undefined {
  return changelog.find((entry) => entry.version === version);
}

/** The most recent changelog entry, regardless of the running version. */
export const latestChangelog: ChangelogEntry | undefined = changelog[0];

/**
 * The entry the "What's new" dialog shows. Prefer an exact match for the running
 * version, but fall back to the latest documented entry so the manual button
 * always opens something even when the current build's version (e.g. a hotfix
 * suffix like `0.1.24b`) isn't itself listed in the changelog.
 */
export const currentChangelog: ChangelogEntry | undefined =
  changelogFor(APP_VERSION) ?? latestChangelog;
