import { Context, DAL, InferEntityType, InternalModuleDeclaration, ITaxModuleService, ITaxProvider, ModulesSdkTypes, TaxRegionDTO, TaxTypes } from "@medusajs/framework/types";
import { ModulesSdkUtils } from "@medusajs/framework/utils";
import { TaxRate, TaxRateRule, TaxRegion } from "../models";
import { TaxProviderService } from ".";
type InjectedDependencies = {
    baseRepository: DAL.RepositoryService;
    taxRateService: ModulesSdkTypes.IMedusaInternalService<any>;
    taxRegionService: ModulesSdkTypes.IMedusaInternalService<any>;
    taxRateRuleService: ModulesSdkTypes.IMedusaInternalService<any>;
    taxProviderService: TaxProviderService;
    [key: `tp_${string}`]: ITaxProvider;
};
declare const TaxModuleService_base: ModulesSdkUtils.MedusaServiceReturnType<{
    TaxRate: {
        dto: TaxTypes.TaxRateDTO;
    };
    TaxRegion: {
        dto: TaxTypes.TaxRegionDTO;
    };
    TaxRateRule: {
        dto: TaxTypes.TaxRateRuleDTO;
    };
    TaxProvider: {
        dto: TaxTypes.TaxProviderDTO;
    };
}>;
export default class TaxModuleService extends TaxModuleService_base implements ITaxModuleService {
    protected readonly moduleDeclaration: InternalModuleDeclaration;
    protected readonly container_: InjectedDependencies;
    protected baseRepository_: DAL.RepositoryService;
    protected taxRateService_: ModulesSdkTypes.IMedusaInternalService<InferEntityType<typeof TaxRate>>;
    protected taxRegionService_: ModulesSdkTypes.IMedusaInternalService<InferEntityType<typeof TaxRegion>>;
    protected taxRateRuleService_: ModulesSdkTypes.IMedusaInternalService<InferEntityType<typeof TaxRateRule>>;
    protected taxProviderService_: TaxProviderService;
    constructor({ baseRepository, taxRateService, taxRegionService, taxRateRuleService, taxProviderService, }: InjectedDependencies, moduleDeclaration: InternalModuleDeclaration);
    createTaxRates(data: TaxTypes.CreateTaxRateDTO[], sharedContext?: Context): Promise<TaxTypes.TaxRateDTO[]>;
    createTaxRates(data: TaxTypes.CreateTaxRateDTO, sharedContext?: Context): Promise<TaxTypes.TaxRateDTO>;
    protected createTaxRates_(data: TaxTypes.CreateTaxRateDTO[], sharedContext?: Context): Promise<{
        id: string;
        rate: number | null;
        code: string;
        name: string;
        is_default: boolean;
        is_combinable: boolean;
        tax_region: {
            id: string;
            country_code: string;
            province_code: string | null;
            metadata: Record<string, unknown> | null;
            created_by: string | null;
            provider: {
                id: string;
                is_enabled: boolean;
                regions: /*elided*/ any[];
                created_at: Date;
                updated_at: Date;
                deleted_at: Date | null;
            };
            parent: /*elided*/ any;
            children: /*elided*/ any[];
            tax_rates: /*elided*/ any[];
            created_at: Date;
            updated_at: Date;
            deleted_at: Date | null;
            provider_id: string | null;
            parent_id: string | null;
        };
        rules: {
            id: string;
            metadata: Record<string, unknown> | null;
            created_by: string | null;
            tax_rate: /*elided*/ any;
            reference: string;
            reference_id: string;
            created_at: Date;
            updated_at: Date;
            deleted_at: Date | null;
            tax_rate_id: string;
        }[];
        metadata: Record<string, unknown> | null;
        created_by: string | null;
        raw_rate: Record<string, unknown> | null;
        created_at: Date;
        updated_at: Date;
        deleted_at: Date | null;
        tax_region_id: string;
    }[]>;
    updateTaxRates(id: string, data: TaxTypes.UpdateTaxRateDTO, sharedContext?: Context): Promise<TaxTypes.TaxRateDTO>;
    updateTaxRates(ids: string[], data: TaxTypes.UpdateTaxRateDTO, sharedContext?: Context): Promise<TaxTypes.TaxRateDTO[]>;
    updateTaxRates(selector: TaxTypes.FilterableTaxRateProps, data: TaxTypes.UpdateTaxRateDTO, sharedContext?: Context): Promise<TaxTypes.TaxRateDTO[]>;
    protected updateTaxRates_(idOrSelector: string | string[] | TaxTypes.FilterableTaxRateProps, data: TaxTypes.UpdateTaxRateDTO, sharedContext?: Context): Promise<{
        id: string;
        rate: number | null;
        code: string;
        name: string;
        is_default: boolean;
        is_combinable: boolean;
        tax_region: {
            id: string;
            country_code: string;
            province_code: string | null;
            metadata: Record<string, unknown> | null;
            created_by: string | null;
            provider: {
                id: string;
                is_enabled: boolean;
                regions: /*elided*/ any[];
                created_at: Date;
                updated_at: Date;
                deleted_at: Date | null;
            };
            parent: /*elided*/ any;
            children: /*elided*/ any[];
            tax_rates: /*elided*/ any[];
            created_at: Date;
            updated_at: Date;
            deleted_at: Date | null;
            provider_id: string | null;
            parent_id: string | null;
        };
        rules: {
            id: string;
            metadata: Record<string, unknown> | null;
            created_by: string | null;
            tax_rate: /*elided*/ any;
            reference: string;
            reference_id: string;
            created_at: Date;
            updated_at: Date;
            deleted_at: Date | null;
            tax_rate_id: string;
        }[];
        metadata: Record<string, unknown> | null;
        created_by: string | null;
        raw_rate: Record<string, unknown> | null;
        created_at: Date;
        updated_at: Date;
        deleted_at: Date | null;
        tax_region_id: string;
    }>;
    private setTaxRateRulesForTaxRates;
    private getTaxRateIdsFromSelector;
    upsertTaxRates(data: TaxTypes.UpsertTaxRateDTO[], sharedContext?: Context): Promise<TaxTypes.TaxRateDTO[]>;
    upsertTaxRates(data: TaxTypes.UpsertTaxRateDTO, sharedContext?: Context): Promise<TaxTypes.TaxRateDTO>;
    createTaxRegions(data: TaxTypes.CreateTaxRegionDTO, sharedContext?: Context): Promise<TaxRegionDTO>;
    createTaxRegions(data: TaxTypes.CreateTaxRegionDTO[], sharedContext?: Context): Promise<TaxRegionDTO[]>;
    createTaxRegions_(data: TaxTypes.CreateTaxRegionDTO[], sharedContext?: Context): Promise<{
        id: string;
        country_code: string;
        province_code: string | null;
        metadata: Record<string, unknown> | null;
        created_by: string | null;
        provider: {
            id: string;
            is_enabled: boolean;
            regions: /*elided*/ any[];
            created_at: Date;
            updated_at: Date;
            deleted_at: Date | null;
        };
        parent: /*elided*/ any;
        children: /*elided*/ any[];
        tax_rates: {
            id: string;
            rate: number | null;
            code: string;
            name: string;
            is_default: boolean;
            is_combinable: boolean;
            tax_region: /*elided*/ any;
            rules: {
                id: string;
                metadata: Record<string, unknown> | null;
                created_by: string | null;
                tax_rate: /*elided*/ any;
                reference: string;
                reference_id: string;
                created_at: Date;
                updated_at: Date;
                deleted_at: Date | null;
                tax_rate_id: string;
            }[];
            metadata: Record<string, unknown> | null;
            created_by: string | null;
            raw_rate: Record<string, unknown> | null;
            created_at: Date;
            updated_at: Date;
            deleted_at: Date | null;
            tax_region_id: string;
        }[];
        created_at: Date;
        updated_at: Date;
        deleted_at: Date | null;
        provider_id: string | null;
        parent_id: string | null;
    }[]>;
    createTaxRateRules(data: TaxTypes.CreateTaxRateRuleDTO, sharedContext?: Context): Promise<TaxTypes.TaxRateRuleDTO>;
    createTaxRateRules(data: TaxTypes.CreateTaxRateRuleDTO[], sharedContext?: Context): Promise<TaxTypes.TaxRateRuleDTO[]>;
    createTaxRateRules_(data: TaxTypes.CreateTaxRateRuleDTO[], sharedContext?: Context): Promise<{
        id: string;
        metadata: Record<string, unknown> | null;
        created_by: string | null;
        tax_rate: {
            id: string;
            rate: number | null;
            code: string;
            name: string;
            is_default: boolean;
            is_combinable: boolean;
            tax_region: {
                id: string;
                country_code: string;
                province_code: string | null;
                metadata: Record<string, unknown> | null;
                created_by: string | null;
                provider: {
                    id: string;
                    is_enabled: boolean;
                    regions: /*elided*/ any[];
                    created_at: Date;
                    updated_at: Date;
                    deleted_at: Date | null;
                };
                parent: /*elided*/ any;
                children: /*elided*/ any[];
                tax_rates: /*elided*/ any[];
                created_at: Date;
                updated_at: Date;
                deleted_at: Date | null;
                provider_id: string | null;
                parent_id: string | null;
            };
            rules: /*elided*/ any[];
            metadata: Record<string, unknown> | null;
            created_by: string | null;
            raw_rate: Record<string, unknown> | null;
            created_at: Date;
            updated_at: Date;
            deleted_at: Date | null;
            tax_region_id: string;
        };
        reference: string;
        reference_id: string;
        created_at: Date;
        updated_at: Date;
        deleted_at: Date | null;
        tax_rate_id: string;
    }[]>;
    getTaxLines(items: (TaxTypes.TaxableItemDTO | TaxTypes.TaxableShippingDTO)[], calculationContext: TaxTypes.TaxCalculationContext, sharedContext?: Context): Promise<(TaxTypes.ItemTaxLineDTO | TaxTypes.ShippingTaxLineDTO)[]>;
    getProvider(providerId: string): ITaxProvider;
    private getTaxLinesFromProvider;
    private normalizeTaxCalculationContext;
    private prepareTaxRegionInputForCreate;
    private verifyProvinceToCountryMatch;
    private getTaxRatesForItem;
    private getTaxRateQueryForItem;
    private rateMatchesQuery;
    private checkRuleMatches;
    private prioritizeRates;
    private normalizeRegionCodes;
}
export {};
//# sourceMappingURL=tax-module-service.d.ts.map