import * as _maestrale_data7 from "@maestrale/data";
import { Attributes, ShareCfg, ShipType } from "@maestrale/data";
import * as _vue_reactivity18 from "@vue/reactivity";
import { ComputedRef, Ref, WritableComputedRef } from "@vue/reactivity";
export * from "@maestrale/data";

//#region src/core/attributes.d.ts
declare function createAttributes(options?: Partial<Attributes>): Attributes;
//#endregion
//#region src/core/commander.d.ts
declare class Commander {
  id: number;
  private template;
  level: Ref<number>;
  name: Ref<string>;
  constructor(id: number);
  get originalName(): string;
  get nationality(): _maestrale_data7.Nationality;
  get rarity(): number;
  get painting(): string;
  get maxLevel(): number;
  private getAbility;
  support: _vue_reactivity18.ComputedRef<number>;
  command: _vue_reactivity18.ComputedRef<number>;
  tactic: _vue_reactivity18.ComputedRef<number>;
  attrRates: _vue_reactivity18.ComputedRef<Attributes>;
  abilities: _vue_reactivity18.ShallowReactive<(CommanderAbility | undefined)[]>;
}
declare function createCommander(id: number): Commander | null;
interface CommanderAbilityEffect {
  type: number;
  nationalities: number[];
  shipTypes: number[];
  key: number;
  value: number;
}
declare class CommanderAbility {
  id: number;
  private template;
  effects: CommanderAbilityEffect[];
  constructor(id: number);
  get name(): string;
  get desc(): string;
  get icon(): string;
  get worth(): number;
}
declare function createCommanderAbility(id: number): CommanderAbility | null;
//#endregion
//#region src/core/equip.d.ts
declare class Equip {
  id: number;
  private statistics;
  private templates;
  level: Ref<number>;
  constructor(id: number);
  private curStat;
  get name(): string;
  get icon(): string;
  get nationality(): _maestrale_data7.Nationality;
  get rarity(): number;
  get type(): _maestrale_data7.EquipType;
  get maxLevel(): number;
  attrs: _vue_reactivity18.ComputedRef<Partial<Attributes>>;
}
declare function createEquip(id: number): Equip | null;
//#endregion
//#region src/types.d.ts
declare enum StrengthenType {
  General = 0,
  Meta = 1,
  Blueprint = 2,
}
declare enum Favor {
  Disappointed = 0,
  Stranger = 1,
  Friendly = 2,
  Like = 3,
  Love = 4,
  Pledge = 5,
  PledgePlus = 6,
}
//#endregion
//#region src/utils.d.ts
declare const ShipFleetKey: unique symbol;
//#endregion
//#region src/core/spweapon.d.ts
declare class SPWeapon {
  id: number;
  private statistics;
  level: Ref<number>;
  constructor(id: number);
  private curStat;
  get name(): string;
  get icon(): string;
  get rarity(): number;
  get maxLevel(): number;
  attrs: _vue_reactivity18.ComputedRef<Partial<Attributes>>;
}
declare function createSPWeapon(id: number): SPWeapon | null;
//#endregion
//#region src/core/technology.d.ts
type TechnologyAttributes = Omit<Attributes, "speed" | "luck">;
interface ITechnology {
  attrs: Record<ShipType, TechnologyAttributes>;
  get: (type: ShipType, attr: keyof Attributes) => number;
}
declare function useTechnology(): ITechnology;
declare function createTechnologyAttributes(): Record<ShipType, TechnologyAttributes>;
//#endregion
//#region src/core/ship.d.ts
interface Strengthen {
  attrs: ComputedRef<Attributes>;
}
interface StrengthenGeneral extends Strengthen {
  type: StrengthenType.General | StrengthenType.Meta;
  adjustedAttrs: Ref<Attributes>;
  maxAttrs: Attributes;
}
interface StrengthenBlueprint extends Strengthen {
  type: StrengthenType.Blueprint;
  blueprint: Ref<number>;
  blueprint1: WritableComputedRef<number>;
  blueprint2: WritableComputedRef<number>;
  blueprintMax1: number;
  blueprintMax2: number;
  blueprintLevel: WritableComputedRef<number>;
}
interface TransformMatrixItem {
  template: ShareCfg.TransformDataTemplate;
  isEnabled: Ref<boolean>;
  nextIds: number[];
}
interface Transform {
  matrix: [TransformMatrixItem[], TransformMatrixItem[], TransformMatrixItem[]][];
  isModernized: Ref<boolean>;
  modernizedId: Ref<number>;
}
declare class Ship {
  id: number;
  technology: ITechnology;
  breakout: Ref<number>;
  maxBreakout: number;
  strengthen: StrengthenGeneral | StrengthenBlueprint;
  transform?: Transform;
  constructor(id: number, technology: ITechnology);
  private get curStat();
  private get curTemp();
  private get curSkin();
  private curId;
  level: Ref<number, number>;
  favor: Ref<Favor, Favor>;
  name: ComputedRef<string>;
  armor: ComputedRef<_maestrale_data7.Armor>;
  nationality: ComputedRef<_maestrale_data7.Nationality>;
  rarity: ComputedRef<number>;
  type: ComputedRef<_maestrale_data7.ShipType>;
  painting: ComputedRef<string>;
  star: ComputedRef<number>;
  maxStar: ComputedRef<number>;
  private getAttr;
  transAttrs: ComputedRef<Attributes>;
  equipAttrs: ComputedRef<Attributes>;
  techAttrs: ComputedRef<Attributes>;
  commanderAttrs: ComputedRef<Attributes>;
  durability: ComputedRef<number>;
  cannon: ComputedRef<number>;
  torpedo: ComputedRef<number>;
  antiaircraft: ComputedRef<number>;
  air: ComputedRef<number>;
  reload: ComputedRef<number>;
  hit: ComputedRef<number>;
  dodge: ComputedRef<number>;
  speed: ComputedRef<number>;
  luck: ComputedRef<number>;
  antisub: ComputedRef<number>;
  oxy_max: ComputedRef<number>;
  ammo: ComputedRef<number>;
  oil: ComputedRef<number>;
  power: ComputedRef<number>;
  equipSlotTypes: ComputedRef<readonly [_maestrale_data7.EquipType[], _maestrale_data7.EquipType[], _maestrale_data7.EquipType[], _maestrale_data7.EquipType[], _maestrale_data7.EquipType[]]>;
  equip1: _vue_reactivity18.ShallowRef<Equip | null, Equip | null>;
  equip2: _vue_reactivity18.ShallowRef<Equip | null, Equip | null>;
  equip3: _vue_reactivity18.ShallowRef<Equip | null, Equip | null>;
  equip4: _vue_reactivity18.ShallowRef<Equip | null, Equip | null>;
  equip5: _vue_reactivity18.ShallowRef<Equip | null, Equip | null>;
  equips: ComputedRef<(Equip | null)[]>;
  spweapon: _vue_reactivity18.ShallowRef<SPWeapon | null, SPWeapon | null>;
  [ShipFleetKey]: _vue_reactivity18.ShallowRef<Fleet | null, Fleet | null>;
  fleet: ComputedRef<Fleet | null>;
}
interface CreateShipOptions {
  level?: number;
  breakout?: number;
  favor?: Favor;
  equips?: (Equip | number | null)[];
  spweapon?: SPWeapon | number | null;
  technology: ITechnology;
}
declare function createShip(id: number, options: CreateShipOptions): Ship | null;
//#endregion
//#region src/core/fleet.d.ts
declare abstract class Fleet {
  name: Ref<string>;
  abstract ships: ComputedRef<(Ship | null)[]>;
  constructor(name: string);
  commander1: _vue_reactivity18.ShallowRef<Commander | null, Commander | null>;
  commander2: _vue_reactivity18.ShallowRef<Commander | null, Commander | null>;
  commanders: ComputedRef<(Commander | null)[]>;
}
declare class SurfaceFleet extends Fleet {
  constructor(name: string);
  ships: ComputedRef<(Ship | null)[]>;
  main1: _vue_reactivity18.ShallowRef<Ship | null, Ship | null>;
  main2: _vue_reactivity18.ShallowRef<Ship | null, Ship | null>;
  main3: _vue_reactivity18.ShallowRef<Ship | null, Ship | null>;
  vanguard1: _vue_reactivity18.ShallowRef<Ship | null, Ship | null>;
  vanguard2: _vue_reactivity18.ShallowRef<Ship | null, Ship | null>;
  vanguard3: _vue_reactivity18.ShallowRef<Ship | null, Ship | null>;
}
declare class SubmarineFleet extends Fleet {
  constructor(name: string);
  ships: ComputedRef<(Ship | null)[]>;
  submarine1: _vue_reactivity18.ShallowRef<Ship | null, Ship | null>;
  submarine2: _vue_reactivity18.ShallowRef<Ship | null, Ship | null>;
  submarine3: _vue_reactivity18.ShallowRef<Ship | null, Ship | null>;
}
declare function createFleet(type: "surface" | "submarine", name?: string): SurfaceFleet | SubmarineFleet;
//#endregion
//#region src/serialize/index.d.ts
interface CreateSerializerOptions {
  technology: ITechnology;
  mapping?: Record<string, object>;
}
declare function createSerializer(options: CreateSerializerOptions): {
  mapping: Record<string, object>;
  serialize: (source: object) => unknown;
  deserialize: (raw: unknown) => unknown;
  cleanup: (raw: unknown) => void;
};
//#endregion
export { Commander, CommanderAbility, CommanderAbilityEffect, CreateSerializerOptions, CreateShipOptions, Equip, Favor, Fleet, ITechnology, SPWeapon, Ship, StrengthenType, SubmarineFleet, SurfaceFleet, TechnologyAttributes, Transform, TransformMatrixItem, createAttributes, createCommander, createCommanderAbility, createEquip, createFleet, createSPWeapon, createSerializer, createShip, createTechnologyAttributes, useTechnology };