import { FooterInfoApi } from "./apiTypes";
import { OrderStatus } from "../../interfaces/types";
export type AutoCompleteAddress = {
    description: string;
    placeId: string;
};
export type PriceInfo = {
    final: number;
    regular: number;
    discountPercent: number;
};
export type Product = {
    id: number;
    price: PriceInfo;
    thumbnail: string;
    name: string;
    averageRating: number;
    reviewsCount: number;
    tag?: {
        id: number;
        name: string;
    } | null;
    sku: string;
    slug: string;
    tags?: {
        id: number;
        name: string;
    }[];
    images: {
        small: string;
        medium: string;
        large: string;
    }[];
    unit: string;
    brand: {
        name: string;
        image: string;
        slug: string;
        productsCount: number;
    } | null;
    productPromotions: ProductPromotion[];
    description: string;
    categories: Category[];
    isInStock?: boolean;
};
export type Banner = {
    name: string;
    url: string;
    featuredImage: string;
    alt?: string;
};
export type HotSearchKeyword = {
    name: string;
    position: number;
    status: boolean;
    createdAt: string;
    updatedAt: string;
};
export type HelpfulUrl = {
    name: string;
    url: string;
    featuredImage: string;
};
export type PopularSearchType = {
    text: string;
};
export type BlogPost = {
    title: string;
    image: string;
    link: string;
    postData: {
        reviewed: {
            author: BlogPostDataReviewedUser | null;
            editor: BlogPostDataReviewedUser | null;
            expert: BlogPostDataReviewedUser | null;
            factCheck: BlogPostDataReviewedUser | null;
            isAuthor: boolean;
        } | null;
        categories: {
            termId: number;
            name: string;
            permalink: string;
            textColor: string;
        }[];
        postDate: string;
        postModified: string;
        modifiedTime: string;
    } | null;
};
export type Brand = {
    id: number;
    image: string;
    position: string;
    isPopular: boolean;
    banners?: Banner[] | null;
    summary?: string | null;
    name: string;
    slug: string;
    description: string | null;
    bestsellerProducts?: Product[] | null;
};
export type HomePage = {
    brands: Brand[];
    hotDeals: Product[];
    newProducts: Product[];
    slideBanners: Banner[];
    subBanners: Banner[];
    footerBanners: Banner[];
    blogPosts: BlogPost[];
    popularCategories: Category[];
    suggestProducts: Category[];
    promotions: Promotion[];
};
export type BlogPostDataReviewedUser = {
    id: number;
    userId: number;
    formerRole: string;
    role: string;
    slug: string;
    displayName: string;
    description: string;
    profileUrl: string;
    avatar: string;
    avatarThumbnail: string;
    turnOffProfile: boolean;
};
export type CategoryPage = {
    id: number;
    name: string;
    slug: string;
    banners: Banner[];
    bestsellerProducts: Product[];
    description: string | null;
};
export type BrandPage = Brand;
export type Category = {
    id: number;
    name: string;
    logo: string;
    slug: string;
    children?: Category[];
    backgroundColor: string;
    parentId?: number;
    fullSlug: string;
    products?: Product[];
};
export type Navigation = {
    hotSearchKeywords: PopularSearchType[];
    helpfulUrls: HelpfulUrl[];
    categories: Category[];
    footer: FooterInfoApi;
    storeId: number;
    customerId: number;
    cartItemsQty: number | null;
};
export type Pagination = {
    current?: number;
    first?: number;
    itemsPerPage?: number;
    last?: number;
    next?: number;
    prev?: number;
    totalItems?: number;
};
export type ProductDetailPage = {
    relatedProducts: Product[];
    bestsellerProducts: Product[];
    viewedProducts: Product[];
    promotions: Promotion[];
} & Product;
export type ProductReview = {
    reviewId: string;
    createdAt: string;
    title: string;
    detail: string;
    nickname: string;
    avatar: string;
    ratingVotes: {
        ratingCode: string;
        value: number;
        percent: number;
    }[];
    images: string[];
};
export type ProductPromotion = {
    id: number;
    name: string;
    thumbnail: string;
    expirationDate: string;
};
export type Promotion = {
    id: number;
    name: string;
    thumbnail: string;
    expiredDate: string;
    points?: number | null;
    description?: string | null;
    slug?: string;
    banners?: string[];
    metaTitle?: string;
    metaKeywords?: string;
    metaDescription?: string;
};
export type Address = {
    id: string | number;
    fullName: string;
    telephone: string;
    province: {
        value: string;
        label: string;
    };
    district: {
        value: string;
        label: string;
    };
    commune: {
        value: string;
        label: string;
    };
    street: string;
    isDefault: boolean;
    fullAddress?: string;
};
export type Statistic = {
    pending: number;
    processing: number;
    delivering: number;
    complete: number;
    canceled: number;
};
export type ProductOrder = {
    sku: string;
    name: string;
    price: number;
    rowTotal: number;
    image: string;
    qty: number;
    tag?: {
        id: number;
        name: string;
    }[] | null;
};
export type Order = {
    orderNumber: string;
    shippingData?: {
        shippingMethod: string;
        shippingDescription: string;
        shippingAddress: {
            fullAddress: string;
            telephone: string;
            fullName: string;
        } | null;
        storeAddress: null;
    } | null;
    orderedDate: string;
    status?: OrderStatus | null;
    totals?: {
        subtotal: number;
        shippingAmount: number;
        discountAmount: number;
        grandTotal: number;
    } | null;
    products: ProductOrder[];
    paymentMethod: string;
};
export type OrderConfirmation = {
    isSuccess: boolean;
    orderInfo: Order | null;
};
export type Province = {
    value: string;
    label: string;
};
export type District = {
    value: string;
    label: string;
};
export type Commune = {
    value: string;
    label: string;
};
export type StoreInfo = {
    id?: string | number;
    name: string;
    address?: string;
    province?: Province;
    district?: District;
};
export type TagData = {
    id: number;
    name: string;
};
export type NavigationItem = {
    logo: string;
    name: string;
    url: string;
};
export type DeliveryAddress = {
    fullAddress: string;
    telephone: string;
    fullName: string;
};
export type CartItem = {
    itemId: number;
    sku: string;
    qty: number;
    name: string;
    price: number;
    basePrice: number;
    productType: string;
    quoteId: string;
    thumbnail: string;
    rowTotal: number;
    promotions: ProductPromotion[];
    isInStock: boolean;
    urlProduct: string;
};
export type CartAddress = {
    id?: number;
    region?: string;
    regionId?: number;
    regionCode?: string;
    countryId?: string;
    street?: string[];
    postcode?: string;
    city?: string;
    firstname?: string;
    lastname?: string;
    customerId?: number;
    email?: string;
    telephone?: string;
    sameAsBilling?: number;
    saveInAddressBook?: number;
    fullAddress?: string;
    customerAddressId?: number;
};
export type EstimatedShipping = {
    carrierCode: string;
    methodCode: string;
    carrierTitle: string;
    methodTitle: string;
    amount: number;
    baseAmount: number;
    available: boolean;
    errorMessage: string;
    priceExclTax: number;
    priceInclTax: number;
};
export type PaymentMethodInfo = {
    code: string;
    title: string;
    thumbnail: string;
};
export type PaymentInformation = {
    paymentMethods: PaymentMethodInfo[] | [];
    totals: CartTotal | null;
};
export type CartBaseCustomer = {
    email?: string;
    firstname?: string;
    lastname?: string;
};
export type CartLoggedInCustomer = {
    id: number;
    groupId: number;
    createdAt: string;
    updatedAt: string;
    createdIn: string;
    storeId: number;
    websiteId: number;
    addresses: CartAddress[];
    disableAutoGroupChange: number;
    isSubscribed: boolean;
} & CartBaseCustomer;
export type Cart = {
    id: number;
    createdAt: string;
    updatedAt: string;
    isActive: boolean;
    isVirtual: boolean;
    items: CartItem[];
    itemsCount: number;
    itemsQty: number;
    customer: Partial<CartLoggedInCustomer> | null;
    billingAddress: CartAddress | null;
    origOrderId: number;
    currency: {
        globalCurrencyCode: string;
        baseCurrencyCode: string;
        storeCurrencyCode: string;
        quoteCurrencyCode: string;
        storeToBaseRate: number;
        storeToQuoteRate: number;
        baseToGlobalRate: number;
        baseToQuoteRate: number;
    };
    customerIsGuest: boolean;
    customerNoteNotify: boolean;
    customerTaxClassId: number;
    storeId: number;
    shippingAssignments: {
        shipping: {
            address: CartAddress | null;
            method: string;
        };
        items: CartItem[];
    }[];
};
export type CartTotal = {
    grandTotal: number;
    baseGrandTotal: number;
    subtotal: number;
    baseSubtotal: number;
    discountAmount: number;
    baseDiscountAmount: number;
    subtotalWithDiscount: number;
    baseSubtotalWithDiscount: number;
    shippingAmount: number;
    baseShippingAmount: number;
    shippingDiscountAmount: number;
    baseShippingDiscountAmount: number;
    taxAmount: number;
    baseTaxAmount: number;
    weeeTaxAppliedAmount: number;
    shippingTaxAmount: number;
    baseShippingTaxAmount: number;
    subtotalInclTax: number;
    shippingInclTax: number;
    baseShippingInclTax: number;
    baseCurrencyCode: string;
    quoteCurrencyCode: string;
    itemsQty: number;
    coupon: {
        couponCode: string;
        couponDescription: string;
    };
    items: {
        itemId: number;
        price: number;
        basePrice: number;
        qty: number;
        rowTotal: number;
        baseRowTotal: number;
        rowTotalWithDiscount: number;
        taxAmount: number;
        baseTaxAmount: number;
        taxPercent: number;
        discountAmount: number;
        baseDiscountAmount: number;
        discountPercent: number;
        priceInclTax: number;
        basePriceInclTax: number;
        rowTotalInclTax: number;
        baseRowTotalInclTax: number;
        options: string;
        weeeTaxAppliedAmount: number;
        weeeTaxApplied: number;
        name: string;
    }[];
    totalSegments: {
        code: string;
        title: string;
        value: number;
    }[];
};
export type Coupon = {
    code: string;
    name: string;
    thumbnail: string;
    description: string;
};
export type Shipping = {
    carrierCode: string;
    methodCode: string;
    title: string;
    description: string;
    price: number;
    thumbnail: string;
};
export type BreadcrumbItem = {
    label: string;
    value: string;
};
