/**
 * Copyright IBM Corp. 2024, 2025
 */
import { EditorTab } from './editor-tab.model.js';
import {
  AssetKinds,
  AssetModelKindConstants,
  NANO_GW_POLICY_KINDS,
  POLICY_KINDS,
} from './base-asset.model.js';

export interface EditorTabsInfo {
  editorId: number;
  tabs: EditorTab[];
  activeTab: EditorTab | -1;
  hm: HashMap;
}

export interface EditorTabItem {
  activeEditor: boolean;
  editorTab: EditorTab;
  position: { line: number; column: number };
  tabsHeight: number;
  width: number;
  setUnSavedTabs: React.Dispatch<React.SetStateAction<number[]>>;
  fileName: string;
  unSavedTabs?: number[];
}

interface HashMap {
  [key: string]: NestedHashMap;
}
interface NestedHashMap {
  [key: string]: string;
}

export const FormViewSupportedKinds = [
  AssetModelKindConstants.API,
  AssetModelKindConstants.Test,
  AssetModelKindConstants.Assertion,
  AssetModelKindConstants.Environment,
  AssetModelKindConstants.PolicySequence,
  AssetModelKindConstants.GlobalPolicy,
  'Product',
  AssetModelKindConstants.Plan,
  AssetModelKindConstants.Quota,
  'OPENAPI',
  'POLICY',
  'SWAGGER',
  'CountLimit'
];

export const FormViewUnsupportedKinds: Record<string, string> = {
  swagger: 'Swagger',
  multiyaml: 'Multi YAML',
  [AssetModelKindConstants.MockEndpoint.toLowerCase()]: 'Mock endpoint',
  [AssetModelKindConstants.MockResponse.toLowerCase()]: 'Mock response',
};

export const API_FORM_VIEW_VALID_KINDS = [
  AssetModelKindConstants.API.toLowerCase(),
  'openapi',
  'swagger',
];
// TODO: COMMON_MODEL: remove the support for policy sequence
export const POLICY_FORM_VIEW_VALID_KINDS = [
  AssetModelKindConstants.PolicySequence.toLowerCase(),
  AssetKinds.StagedPolicySequence.toLowerCase(),
  AssetKinds.FreeFlowPolicySequence.toLowerCase(),
  ...POLICY_KINDS.map((kind) => kind.toLowerCase()),
  AssetModelKindConstants.GlobalPolicy.toLowerCase(),
  AssetModelKindConstants.Plan.toLowerCase(),
  'product',
  'requestlimit',
  AssetKinds.URISchemes.toLowerCase(),
  AssetKinds.Log.toLowerCase(),
  AssetKinds.MonitorTraffic.toLowerCase(),
  ...NANO_GW_POLICY_KINDS.map((kind) => kind.toLowerCase()),
];
export const TEST_FORM_VIEW_VALID_KINDS = [
  AssetModelKindConstants.Assertion.toLowerCase(),
  AssetModelKindConstants.Environment.toLowerCase(),
  AssetModelKindConstants.Test.toLowerCase(),
];

export const DATAPOWERASSEMBLY_VALID_KINDS = ['datapowerassembly'];
