import type { DefineComponent } from 'vue'
import type { FrontSection } from '~/types/frontSection'

export type componentsListType = {
  name: string
  component: FrontSection
  componentInstance: DefineComponent
}

export type PartnersList = {
  country_iso: string
  country_name: string
  total: number
}

export type FeatureValue = {
  parent: number
  products_with_value: number
  value: string
  value_id: number
}

export type Feature = {
  feature: string
  feature_id: number
  feature_values: FeatureValue[]
  products_with_feature: number
}

export type ProductType = {
  applied_tax_rate: number
  cover_picture_uuid: string
  description: string
  formatted_price: string
  id: number
  in_stock: number
  is_sale_active: boolean
  link_rewrite: string
  name: string
  price: number
  tax_name: string
  cart_item_id?: number
  product_id?: number
}

export interface Country {
  iso_code: string
  currency_iso_code: string
  call_prefix: string
  need_postcode: boolean
  postcode_format: string
  is_default: boolean
  active: boolean
  name: string
}

export interface Currency {
  iso_code: string
  name: string
  UpdatedAt: string
  iso_code_num: number
  precision: number
  sign: string
  active: boolean
  suffix: boolean
}

export interface Language {
  id: number
  name: string
  iso_code: string
  lang_code: string
  date_format: string
  date_format_short: string
  rtl: boolean
  is_default: boolean
  active: boolean
}

export interface CookieData {
  country: Country
  currency: Currency
  language: Language
}

export interface CartItem {
  cart_item_id: number
  link_rewrite: string
  name: string
  picture_uuid: string
  product_id: number
  quantity: number
  single_item_price: number
  total_price: number
}

export interface GenericResponse<Data> {
  data: Data
  message?: string
  status: number
}

export interface GenericResponseItems<Data> {
  data: { items: Data, items_count: number }
  message?: string
  status: number
}

export interface GenericResponseChildren<Data> {
  data: { children: Data, items_count: number }
  message?: string
  status: number
}

export type {
  Product,
  ProductItem,
  CategoryProductItem,
  FeatureProductItem,
  RecommendationProductItem,
  CartProduct,
  UserCart,
} from './product'
export type { FrontMenu, FrontMenuLang, UIFrontMenu } from './frontMenu'
export type { Contact, Footer, FooterDoc, FooterPdf } from './footer'
export type { CalculatorOutput, PlanPrediction, FeatureCalculator, InvestmentPiece, PeriodToFirstPiece } from './planPrediction'
