/*
 This file is part of GNU Taler
 (C) 2022-2025 Taler Systems S.A.

 GNU Taler is free software; you can redistribute it and/or modify it under the
 terms of the GNU General Public License as published by the Free Software
 Foundation; either version 3, or (at your option) any later version.

 GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

 You should have received a copy of the GNU General Public License along with
 GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
 */

/**
 *
 * @author Sebastian Javier Marchano (sebasjm)
 */
import { strings } from "./i18n/strings.js";

import * as pages from "./pages/index.stories.js";

import {
  ExchangeApiProviderTesting,
  ExchangeContextType,
  renderStories,
} from "@gnu-taler/web-util/browser";

import { TalerExchangeApi } from "@gnu-taler/taler-util";
import { ComponentChildren, FunctionComponent, VNode, h } from "preact";
import "./scss/main.css";

function main(): void {
  renderStories(
    { pages },
    {
      strings,
      getWrapperForGroup,
    },
  );
}

function getWrapperForGroup(): FunctionComponent {
  return function All({ children }: { children?: ComponentChildren }): VNode {
    const config: TalerExchangeApi.ExchangeVersionResponse = {
      currency: "ARS",
      currency_specification: {
        alt_unit_names: {},
        name: "ARS",
        num_fractional_input_digits: 2,
        num_fractional_normal_digits: 2,
        num_fractional_trailing_zero_digits: 2,
      },
      name: "taler-exchange",
      supported_kyc_requirements: [],
      version: "asd",
    };
    // @ts-expect-error don't care about the content of keys
    const keys: TalerExchangeApi.ExchangeKeysResponse = {};
    const value: ExchangeContextType = {
      cancelRequest: () => null,
      config: { config, keys },
      url: new URL("/", "http://localhost"),
      hints: [],
      lib: {
        exchange: undefined!, // FIXME: mock
      },
      unthrottledApi: {
        exchange: undefined!, // FIXME: mock
      },
      onActivity: () => null!,
    };
    return (
      <ExchangeApiProviderTesting value={value}>
        {children}
      </ExchangeApiProviderTesting>
    );
  };
}

if (document.readyState === "loading") {
  document.addEventListener("DOMContentLoaded", main);
} else {
  main();
}
