/**
 * This file is autogenerated.
 *
 * Generated by scripts/line-bot-client-generator/main.mjs
 * Do not edit this file directly.
 */

import * as insight from "./insight/api.js";

import * as liff from "./liff/api.js";

import * as manageAudience from "./manage-audience/api.js";

import * as messagingApi from "./messaging-api/api.js";

import * as moduleOperation from "./module/api.js";

import * as moduleAttach from "./module-attach/api.js";

import * as shop from "./shop/api.js";

import type { LineBotClientDelegates } from "./line-bot-client.generated.js";

interface LineBotClientConfig {
  /** Channel access token issued for your LINE Official Account. */
  readonly channelAccessToken: string;
  /** Default HTTP headers to include in every API request. */
  readonly defaultHeaders?: Record<string, string>;
  /** Base URL for the LINE Messaging API. Defaults to https://api.line.me */
  readonly apiBaseURL?: string;
  /** Base URL for the LINE data API (used for blob/binary operations). Defaults to https://api-data.line.me */
  readonly dataApiBaseURL?: string;
  /** Base URL for the LINE Manager API. Defaults to https://manager.line.biz */
  readonly managerBaseURL?: string;
}

export function createLineBotClientDelegates(
  config: LineBotClientConfig,
): LineBotClientDelegates {
  return {
    insight: new insight.InsightClient({
      baseURL: config.apiBaseURL,
      channelAccessToken: config.channelAccessToken,
      defaultHeaders: config.defaultHeaders,
    }),
    liff: new liff.LiffClient({
      baseURL: config.apiBaseURL,
      channelAccessToken: config.channelAccessToken,
      defaultHeaders: config.defaultHeaders,
    }),
    manageAudience: new manageAudience.ManageAudienceClient({
      baseURL: config.apiBaseURL,
      channelAccessToken: config.channelAccessToken,
      defaultHeaders: config.defaultHeaders,
    }),
    manageAudienceBlob: new manageAudience.ManageAudienceBlobClient({
      baseURL: config.dataApiBaseURL,
      channelAccessToken: config.channelAccessToken,
      defaultHeaders: config.defaultHeaders,
    }),
    messagingApi: new messagingApi.MessagingApiClient({
      baseURL: config.apiBaseURL,
      channelAccessToken: config.channelAccessToken,
      defaultHeaders: config.defaultHeaders,
    }),
    messagingApiBlob: new messagingApi.MessagingApiBlobClient({
      baseURL: config.dataApiBaseURL,
      channelAccessToken: config.channelAccessToken,
      defaultHeaders: config.defaultHeaders,
    }),
    lineModule: new moduleOperation.LineModuleClient({
      baseURL: config.apiBaseURL,
      channelAccessToken: config.channelAccessToken,
      defaultHeaders: config.defaultHeaders,
    }),
    lineModuleAttach: new moduleAttach.LineModuleAttachClient({
      baseURL: config.managerBaseURL,
      channelAccessToken: config.channelAccessToken,
      defaultHeaders: config.defaultHeaders,
    }),
    shop: new shop.ShopClient({
      baseURL: config.apiBaseURL,
      channelAccessToken: config.channelAccessToken,
      defaultHeaders: config.defaultHeaders,
    }),
  };
}
