import { BlogItemModel, CategoryModel, CommentModel, HeaderModel, ImageModel, LocalizationModel, MenuItemModel, PaginationModel, RouteModel, ShopItemModel } from "./"
import { ResponseModel } from "./abstractions"
import * as Pages from "./pages"




// Shop response models
export interface GetShopCatalogResponseModel extends PaginationModel<ShopItemModel>, ResponseModel {}

export interface GetShopCategoriesResponseModel extends ResponseModel {
  items: CategoryModel []
}

export interface GetShopFeaturedResponseModel extends ResponseModel {
  items: ShopItemModel []
}

export interface GetShopItemResponseModel extends ShopItemModel, ResponseModel {
  comments: CommentModel []
}

export interface GetShopRelatedResponseModel extends ResponseModel {
  items: ShopItemModel []
}


export interface GetShopCartItemResponseModel {
  slug: string
  sku: string,
  image: ImageModel,
  title: string,
  brandName: string,
  shortText: string,
  created: string,
  price: number,
  newPrice?: number,
  quantity: number
}


// Static content response model
export interface GetContentResponseModel extends ResponseModel {
  siteName: string,
  siteUrl: string,

  header: HeaderModel,

  localization: LocalizationModel,
  
  routes: RouteModel [],
  adminRoutes: RouteModel [],
  serviceRoutes: RouteModel [],

  topMenu: MenuItemModel [],
  sideMenu: MenuItemModel [],

  homePage: Pages.HomePageModel,

  shopCatalog: Pages.ShopCatalogPageModel,
  shopItem: Pages.ShopItemPageModel,
  shopCart: Pages.ShopCartPageModel,
  shopCheckout: Pages.ShopCheckoutPageModel,

  blogCatalog: Pages.BlogCatalogPageModel,
  blogItem: Pages.BlogItemPageModel,

  signIn: Pages.SignInPageModel,
  signUp: Pages.SignUpPageModel
}

// Blog response models
export interface GetBlogCatalogResponseModel extends PaginationModel<BlogItemModel>, ResponseModel { }

export interface GetBlogCategoriesResponseModel extends ResponseModel {
  items: CategoryModel []
}
export interface GetBlogFeaturedResponseModel extends  ResponseModel {
  items: BlogItemModel []
}

export interface GetBlogItemResponseModel extends BlogItemModel, ResponseModel {
  comments: CommentModel []
}

// Weather forecasts
export interface GetWeatherForecastResponseModel extends ResponseModel {
  date: string,
  temperatireC: number,
  temperatureF: number,
  summary?: string
}
