import { Store } from '@datorama/akita';
import { SelectInputOption } from '@flarehr/beacon/dist/types/components/dropdown/dropdown';
import * as O from 'fp-ts/Option';
export declare type VehicleInfo = {
  make: O.Option<string>;
  makeId: O.Option<number>;
  model: O.Option<string>;
  modelId: O.Option<number>;
  year: O.Option<number>;
  bodyType: O.Option<string>;
  bodyTypeId: O.Option<number>;
  selectedVariant: O.Option<CarsModelVariant>;
  isUsedCarRequested: O.Option<boolean>;
  approximatePrice: O.Option<number>;
};
export declare type AuState = 'ACT' | 'NSW' | 'NT' | 'QLD' | 'SA' | 'TAS' | 'VIC' | 'WA';
export declare type PaymentPeriod = 'Monthly' | 'Fortnightly' | 'Weekly';
export declare type EmploymentType = 'Full-time' | 'Part-time' | 'Casual' | 'Contractor' | 'Other';
export declare type UserInfo = {
  annualSalary: O.Option<number>;
  annualKms: O.Option<number>;
  state: O.Option<AuState>;
  paymentPeriod: O.Option<PaymentPeriod>;
  term: O.Option<number>;
  employmentType: O.Option<EmploymentType>;
};
export declare type QuoteResult = {
  afterTaxEffectPerPayCycle: O.Option<number>;
  taxSaving: O.Option<number>;
  residualValue: O.Option<number>;
  financedAmount: O.Option<number>;
  fuel: O.Option<number>;
  serviceAndMaintenance: O.Option<number>;
  registrationAndCtp: O.Option<number>;
  comprehensiveInsurance: O.Option<number>;
  managementFee: O.Option<number>;
  quoteState: 'Not calculated' | 'Calculation pending' | 'Calculated';
};
export declare type UserDetails = {
  employerName: O.Option<string>;
  userFirstName: O.Option<string>;
  userLastName: O.Option<string>;
  contactNumber: O.Option<string>;
  emailAddress: O.Option<string>;
};
export declare type CarsModelVariant = {
  variantId: number;
  description: string;
  buildYear: number;
  modelMonth: number;
  listPriceGross: number;
  engineLitres: number;
  transmission: string;
  fuelTypeId: number;
  photoUri: O.Option<string>;
};
export declare type CarsReferenceLists = {
  makeList: O.Option<Array<SelectInputOption<number>>>;
  modelList: O.Option<Array<SelectInputOption<number>>>;
  yearList: O.Option<Array<SelectInputOption<number>>>;
  bodyTypeList: O.Option<Array<SelectInputOption<number>>>;
  modelVariantsList: O.Option<Array<CarsModelVariant>>;
};
export declare type SessionState = {
  vehicle: VehicleInfo;
  user: UserInfo;
  quote: QuoteResult;
  userDetails: UserDetails;
  refLists: CarsReferenceLists;
  distinctUserId: string;
};
export declare function createInitialState(): SessionState;
export declare class SessionStore extends Store<SessionState> {
  constructor();
  updateQuote(quote: QuoteResult): void;
  setVehicleState<T>(key: keyof VehicleInfo, value: T): void;
  updateList<T>(name: keyof CarsReferenceLists, value: Array<T>): void;
  setDistinctUserId(userId: O.Option<string>): void;
}
declare const _default: SessionStore;
export default _default;
