export type CurrentLocale = "en" | "pt";

export interface Position {
  id: string;
  ticker: string;
  type: string;
  qtd: string;
  date: string;
}

export interface Asset {
  name: string | null;
  id: number;
  ticker: string;
  logo: string | null;
  sector: string | null;
}

export interface SelectedAsset extends Asset {
  minDate: string;
  maxDate: string;
}

export interface Tick {
  date: number;
  open: number;
  high: number;
  low: number;
  close: number;
  volume: number;
}

export interface AssetPriceData {
  ticker: string;
  data: Tick[];
}

export type HandleAssetSelected = (asset: Asset | SelectedAsset) => void;

export type SetAssets = (
  value: SelectedAsset[] | ((val: SelectedAsset[]) => SelectedAsset[])
) => void;

export type SetPositions = (
  value: Position[] | ((val: Position[]) => Position[])
) => void;

export type SetCurrentLocale = (
  value: CurrentLocale | ((val: CurrentLocale) => CurrentLocale)
) => void;

export interface PageText {
  header: {
    simulator: string;
    about: string;
  };
  body: {
    selectAssets: string;
    searchAssets: string;
    selectedAssets: string;
    noAssetSelected: string;
    portfolio: string;
    noPurchases: string;
    assetModal: {
      purchaseGenerator: string;
      buyAmount: string;
      frequency: {
        title: string;
        monthly: string;
        quarterly: string;
        biannualy: string;
        yearly: string;
        random: string;
      };
      dayTextMap: {
        monthly: string;
        quarterly: string;
        biannualy: string;
        yearly: string;
        random: string;
      };
      dayOfMonth: string;
      numberOfPurchases: string;
      generatePurchases: string;
      onePurchase: string;
      purchases: string;
      noPurchases: string;
      value: string;
      date: string;
      add: string;
    };
    totalInvested: string;
    currentValue: string;
    result: string;
    performance: string;
  };
  footer: {
    credits: string;
  };
}

export interface Localization {
  pt: PageText;
  en: PageText;
}

export interface ExtendedPosition extends Position {
  ts: number;
}

export interface AssetPosition {
  [key: string]: ExtendedPosition[];
}

export type ChartDataset = {
  label: string;
  fill: {
    target: string;
    above: string;
    below: string;
  };
  data: number[];
};

export type ChartData = {
  labels: number[];
  datasets: ChartDataset[];
};

export type WalletTotals = {
  totalInvested: number;
  totalWalletValue: number;
  result: number;
  performancePct: number;
};

export type WalletStats = {
  totals: WalletTotals;
  globalFirstTs: number;
  globalLastTs: number;
  chart: ChartData;
};
