/// <reference types="multer" />
import { ErrorService } from '../../error/error.service';
import { QueryRunner, Repository } from 'typeorm';
import { ProductEntity } from './entities/product.entity';
import { ProductMakerBrandDto } from './dto/product-maker-brand.dto';
import { UpdateProductDto } from './dto/update-product.dto';
import { ProductMakerBrandMappingEntity } from './entities/product-maker-brand-mapping.entity';
import { ProductAttributeMappingEntity } from './entities/product-attribute-mapping.entity';
import { CreateProductDto } from './dto/create-product.dto';
import { ProductPictureMappingEntity } from './entities/product-picture-mapping.entity';
import { PictureEntity } from './entities/picture.entity';
import { CreateProductPictureDto } from './dto/create-product-picture.dto';
import { QuantityUnitEntity } from './entities/quantity-unit.entity';
import { CreateQuantityUnitDto } from './dto/create-quantity-unit.dto';
import { UpdateQuantityUnitDto } from './dto/update-quantity-unit.dto';
import { ProductNotifQuantityEntity } from './entities/product-notif-quantity.entity';
import { CreateNotifListDto } from './dto/create-notif-list.dto';
import { SmsService } from 'src/sms/sms.service';
import { MakerBrandProductDto } from '../car/dto/maker-brand-product.dto';
import { CreateLinkAttributeToProductDto } from './dto/create-link-attribute-to-product.dto';
import { SiteInfoService } from '../siteInfo/site-info.service';
import { LogService } from '../log/log.service';
export declare class ProductService {
    private productRepository;
    private makerBrandMappingRepository;
    private attributeMappingRepository;
    private pictureRepository;
    private productPictureMappingRepository;
    private quantityUnitRepository;
    private productNotifQuantityRepository;
    private error;
    private sms;
    private siteInfoService;
    private logService;
    constructor(productRepository: Repository<ProductEntity>, makerBrandMappingRepository: Repository<ProductMakerBrandMappingEntity>, attributeMappingRepository: Repository<ProductAttributeMappingEntity>, pictureRepository: Repository<PictureEntity>, productPictureMappingRepository: Repository<ProductPictureMappingEntity>, quantityUnitRepository: Repository<QuantityUnitEntity>, productNotifQuantityRepository: Repository<ProductNotifQuantityEntity>, error: ErrorService, sms: SmsService, siteInfoService: SiteInfoService, logService: LogService);
    waitingList(page?: number, limit?: number, filters?: any, sorts?: any): Promise<{
        items: ProductEntity[];
        pagination: {
            itemsPerPage: number;
            totalItems: number;
            currentPage: number;
            totalPages: number;
        };
    }>;
    getAll(page: number, limit: number, filters: any, sorts: any, makerBrandId: any, hasNotifQuantity: boolean, makerBrandIdForMapping: any, wage: any, userId: number, accessAll?: boolean): Promise<{
        items: ProductEntity[];
        pagination: {
            itemsPerPage: number;
            totalItems: number;
            currentPage: number;
            totalPages: number;
        };
    }>;
    getAllForMapping(page?: number, limit?: number, filters?: any, sorts?: any, makerBrandIdForMapping?: any, wage?: any): Promise<{
        items: ProductEntity[];
        pagination: {
            itemsPerPage: number;
            totalItems: number;
            currentPage: number;
            totalPages: number;
        };
    }>;
    getFull(userId: any, onlyCreator?: boolean): Promise<ProductEntity[]>;
    makerBrandMapping(productId: string, dto: ProductMakerBrandDto, operatorUserId: string, accessAll?: boolean): Promise<boolean>;
    makerBrandToProductMapping(makerBrandId: number, dto: MakerBrandProductDto): Promise<boolean>;
    getById(id: string): Promise<ProductEntity>;
    getRawById(id: string): Promise<ProductEntity>;
    getAllRawByIds(ids: string[]): Promise<ProductEntity[]>;
    confirmWaiting(id: string): Promise<boolean>;
    updateById(productId: string, dto: UpdateProductDto, image: Express.Multer.File, operatorUserId: string, accessAll?: boolean): Promise<import("typeorm").UpdateResult>;
    statistic(): Promise<{
        published: number;
    }>;
    statisticSales(filters: any, userId: number, accessAll?: boolean): Promise<any[]>;
    calTotalPrice(products: any, isService?: boolean, makerBrandId?: any): Promise<{
        orderTotal: number;
        wageTotal: number;
        orderTax: number;
        serviceDiscount: number;
    }>;
    calPriceAndWage(product: any, calWage?: boolean, isService?: boolean, makerBrandId?: any): Promise<{
        itemPrice: number;
        wage: number;
        tax: number;
        discount: number;
    }>;
    private _getWageProduct;
    addProduct(dto: CreateProductDto, image: Express.Multer.File, operatorUserId: string, accessAll?: boolean): Promise<ProductEntity>;
    addProductPicture(dto: CreateProductPictureDto, image: Express.Multer.File, operatorUserId: string): Promise<boolean>;
    getPictureByProductId(productId: string): Promise<ProductPictureMappingEntity[]>;
    deleteProductPicture(pictureId: number, productId: string, operatorUserId: string): Promise<boolean>;
    getQuantityUnits(): Promise<QuantityUnitEntity[]>;
    getQuantityUnitById(id: number): Promise<QuantityUnitEntity>;
    addQuantityUnit(dto: CreateQuantityUnitDto, operatorUserId: string): Promise<QuantityUnitEntity>;
    updateQuantityUnit(unitId: number, dto: UpdateQuantityUnitDto, operatorUserId: string): Promise<import("typeorm").UpdateResult>;
    deleteQuantityUnit(id: number): Promise<import("typeorm").DeleteResult>;
    getPendingNotifCountByProductId(productId: string): Promise<number>;
    sendNotifForList(dto: CreateNotifListDto, operatorUserId: string): Promise<boolean>;
    linkAttributeToProduct(dto: CreateLinkAttributeToProductDto, operatorUserId: string): Promise<ProductAttributeMappingEntity>;
    unlinkAttributeToProduct(productId: string, optionId: number, operatorUserId: string): Promise<import("typeorm").DeleteResult>;
    updateStockQuantity(id: string, increaseDescreaseQuantity: number, isOilGovernmentOrder?: boolean, queryRunner?: QueryRunner): Promise<void>;
    deleteProduct(id: number, operatorUserId: string, accessAll?: boolean): Promise<boolean>;
}
