import { Prisma, LocationType } from '@prisma/client';
import { PrismaService } from "../../../core/database/prisma/prisma.service";
export interface LocationInput {
    code?: string;
    name: string;
    type: LocationType;
    countryCode?: string;
    address?: string;
    parentLocationId?: string;
    customerId?: string;
    enabled?: boolean;
}
export declare class LocationService {
    private readonly prisma;
    constructor(prisma: PrismaService);
    list(query: {
        search?: string;
        type?: LocationType;
        customerId?: string;
        enabledOnly?: boolean;
    }): Promise<{
        type: import("@prisma/client").$Enums.LocationType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: Prisma.JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        address: string | null;
        enabled: boolean;
        latitude: Prisma.Decimal | null;
        longitude: Prisma.Decimal | null;
        countryCode: string | null;
        customerId: string | null;
        parentLocationId: string | null;
    }[]>;
    findOne(id: string): Promise<{
        children: {
            type: import("@prisma/client").$Enums.LocationType;
            code: string;
            id: string;
            createdAt: Date;
            name: string;
            metadata: Prisma.JsonValue;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            address: string | null;
            enabled: boolean;
            latitude: Prisma.Decimal | null;
            longitude: Prisma.Decimal | null;
            countryCode: string | null;
            customerId: string | null;
            parentLocationId: string | null;
        }[];
        parent: {
            type: import("@prisma/client").$Enums.LocationType;
            code: string;
            id: string;
            createdAt: Date;
            name: string;
            metadata: Prisma.JsonValue;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            address: string | null;
            enabled: boolean;
            latitude: Prisma.Decimal | null;
            longitude: Prisma.Decimal | null;
            countryCode: string | null;
            customerId: string | null;
            parentLocationId: string | null;
        } | null;
    } & {
        type: import("@prisma/client").$Enums.LocationType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: Prisma.JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        address: string | null;
        enabled: boolean;
        latitude: Prisma.Decimal | null;
        longitude: Prisma.Decimal | null;
        countryCode: string | null;
        customerId: string | null;
        parentLocationId: string | null;
    }>;
    findByCodesIn(codes: string[]): Promise<Map<string, Awaited<ReturnType<typeof this.prisma.location.findFirst>>>>;
    create(input: LocationInput, userId: string, organizationId: string): Promise<{
        type: import("@prisma/client").$Enums.LocationType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: Prisma.JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        address: string | null;
        enabled: boolean;
        latitude: Prisma.Decimal | null;
        longitude: Prisma.Decimal | null;
        countryCode: string | null;
        customerId: string | null;
        parentLocationId: string | null;
    }>;
    update(id: string, input: Partial<LocationInput>): Promise<{
        type: import("@prisma/client").$Enums.LocationType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: Prisma.JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        address: string | null;
        enabled: boolean;
        latitude: Prisma.Decimal | null;
        longitude: Prisma.Decimal | null;
        countryCode: string | null;
        customerId: string | null;
        parentLocationId: string | null;
    }>;
    softDelete(id: string): Promise<{
        id: string;
        deleted: boolean;
    }>;
    restore(id: string): Promise<{
        children: {
            type: import("@prisma/client").$Enums.LocationType;
            code: string;
            id: string;
            createdAt: Date;
            name: string;
            metadata: Prisma.JsonValue;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            address: string | null;
            enabled: boolean;
            latitude: Prisma.Decimal | null;
            longitude: Prisma.Decimal | null;
            countryCode: string | null;
            customerId: string | null;
            parentLocationId: string | null;
        }[];
        parent: {
            type: import("@prisma/client").$Enums.LocationType;
            code: string;
            id: string;
            createdAt: Date;
            name: string;
            metadata: Prisma.JsonValue;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            address: string | null;
            enabled: boolean;
            latitude: Prisma.Decimal | null;
            longitude: Prisma.Decimal | null;
            countryCode: string | null;
            customerId: string | null;
            parentLocationId: string | null;
        } | null;
    } & {
        type: import("@prisma/client").$Enums.LocationType;
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        metadata: Prisma.JsonValue;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        address: string | null;
        enabled: boolean;
        latitude: Prisma.Decimal | null;
        longitude: Prisma.Decimal | null;
        countryCode: string | null;
        customerId: string | null;
        parentLocationId: string | null;
    }>;
}
