import { UsersService } from './users.service';
import { UserRole } from '@prisma/client';
import { CreateAdminWithShopDto } from './dto/create-admin-with-shop.dto';
import { Request } from 'express';
import { CreateSubadminDto } from './dto/create-subadmin.dto';
import { CreateCustomerDto } from './dto/create-customer.dto';
import { SetShopActiveDto } from './dto/set-shop-active.dto';
import { CreateOwnedShopDto } from './dto/create-owned-shop.dto';
import { SetShopPlanDto } from './dto/set-shop-plan.dto';
import { UpdateOwnedShopDto } from './dto/update-owned-shop.dto';
import { UpdateSubadminShopsDto } from './dto/update-subadmin-shops.dto';
import { UpdateSubadminPermissionsDto } from './dto/update-subadmin-permissions.dto';
import { UpdateShopIntegrationsDto } from './dto/update-shop-integrations.dto';
import { RejectShopDto } from './dto/reject-shop.dto';
import { SetShopStatusDto } from './dto/set-shop-status.dto';
import { SetCustomerActiveDto } from './dto/set-customer-active.dto';
import { CreateSuperadminDto } from './dto/create-superadmin.dto';
import { SetUserActiveDto } from './dto/set-user-active.dto';
import { UpdateManagedUserDto } from './dto/update-managed-user.dto';
import { UpdateMyLocationDto } from './dto/update-my-location.dto';
import { UpdateMyProfileDto } from './dto/update-my-profile.dto';
import { ClaimCouponDto } from './dto/claim-coupon.dto';
type AuthedRequest = Request & {
    user?: {
        id: string;
        role: UserRole;
        shopId?: string | null;
    };
};
export declare class UsersController {
    private readonly users;
    constructor(users: UsersService);
    myDashboard(req: AuthedRequest): Promise<{
        cashiCoins: {
            available: number;
            earned: number;
            spent: number;
        };
        cashiPoints: {
            available: number;
            earned: number;
            redeemed: number;
        };
        cashback: {
            savedAmount: number;
        };
        coupons: {
            active: number;
            used: number;
            expired: number;
        };
    }>;
    myEarnings(req: AuthedRequest, page?: string, limit?: string): Promise<{
        page: number;
        limit: number;
        total: number;
        items: {
            id: string;
            createdAt: Date;
            amount: number;
            cashiCoinsEarned: any;
            cashiPointsEarned: number;
            cashiPointsRedeemed: number;
            originalAmount: number | null;
            discountAmount: number;
            pointsEarned: number;
            pointsRedeemed: number;
            shop: {
                id: string;
                name: string;
                username: string | null;
                imageUrl: string | null;
            };
        }[];
    }>;
    myShopActivity(req: AuthedRequest, shopId?: string, page?: string, limit?: string): Promise<{
        shopId: string;
        stats: {
            visits: number;
            cashiPointsAvailable: number;
            cashiPointsEarned: number;
            cashiPointsRedeemed: number;
            cashiCoinsEarned: number;
            savedAmount: number;
        };
        page: number;
        limit: number;
        total: number;
        items: {
            id: string;
            createdAt: Date;
            amount: number;
            cashiCoinsEarned: any;
            cashiPointsEarned: number;
            cashiPointsRedeemed: number;
            originalAmount: number | null;
            discountAmount: number;
            pointsEarned: number;
            pointsRedeemed: number;
        }[];
    }>;
    myCoupons(req: AuthedRequest): Promise<{
        active: any[];
        used: any[];
        expired: any[];
    }>;
    myAvailableCoupons(req: AuthedRequest, shopId?: string, lat?: string, lng?: string, radiusKm?: string, limit?: string): Promise<{
        items: any[];
        radiusKm: number;
        usedCoords: boolean;
    }>;
    claimCoupon(req: AuthedRequest, dto: ClaimCouponDto): Promise<{
        ok: boolean;
        assignment: {
            assignmentId: string;
            status: import("@prisma/client").$Enums.CustomerCouponStatus;
            assignedAt: Date;
            redeemedAt: Date | null;
            cashiCoinsSpent: number;
            cashiPointsSpent: number;
            coupon: any;
        };
        cashiCoins: {
            available: number;
        };
        cashiPoints: {
            available: number;
        };
    }>;
    updateMyProfile(req: AuthedRequest, dto: UpdateMyProfileDto): Promise<{
        id: string;
        email: string | null;
        phone: string | null;
        role: import("@prisma/client").$Enums.UserRole;
        name: string | null;
    }>;
    updateMyLocation(req: AuthedRequest, dto: UpdateMyLocationDto): Promise<{
        id: string;
        latitude: number | null;
        longitude: number | null;
        locationAddress: string | null;
    }>;
    deactivateMe(req: AuthedRequest): Promise<{
        deactivated: boolean;
        user?: undefined;
    } | {
        deactivated: boolean;
        user: {
            id: string;
            isActive: boolean;
            deactivatedAt: Date | null;
        };
    }>;
    listOwnedShops(req: AuthedRequest, page?: string, limit?: string, q?: string, status?: string, isActive?: string, planCode?: string): Promise<any[]> | Promise<{
        page: number;
        limit: number;
        total: number;
        items: any[];
    }>;
    createShop(req: AuthedRequest, dto: CreateOwnedShopDto): Promise<any>;
    updateShop(req: AuthedRequest, id: string, dto: UpdateOwnedShopDto): Promise<{
        updated: boolean;
        shop: any;
    }>;
    uploadShopImage(req: AuthedRequest & {
        file?: any;
    }, id: string): Promise<{
        updated: boolean;
        shop: {
            id: string;
            imageUrl: string | null;
        };
    }>;
    getShopIntegrations(req: AuthedRequest, id: string): Promise<{
        id: string;
        googleApiKey: string | null;
        googlePlaceId: string | null;
        facebookAppId: string | null;
        facebookAppSecret: string | null;
        instagramAccessToken: string | null;
        instagramBusinessAccountId: string | null;
    }>;
    updateShopIntegrations(req: AuthedRequest, id: string, dto: UpdateShopIntegrationsDto): Promise<{
        updated: boolean;
        integrations: {
            id: string;
            updatedAt: Date;
            googleApiKey: string | null;
            googlePlaceId: string | null;
            facebookAppId: string | null;
            facebookAppSecret: string | null;
            instagramAccessToken: string | null;
            instagramBusinessAccountId: string | null;
        };
    }>;
    switchShop(req: AuthedRequest, id: string): Promise<{
        switched: boolean;
        shopId: string;
    }>;
    setShopPlan(req: AuthedRequest, id: string, dto: SetShopPlanDto): Promise<{
        updated: boolean;
        renewed: boolean;
        shop: any;
        scheduled?: undefined;
        effectiveAt?: undefined;
    } | {
        updated: boolean;
        scheduled: boolean;
        effectiveAt: Date;
        shop: any;
        renewed?: undefined;
    } | {
        updated: boolean;
        shop: any;
        renewed?: undefined;
        scheduled?: undefined;
        effectiveAt?: undefined;
    }>;
    createAdminWithShop(dto: CreateAdminWithShopDto): Promise<{
        admin: {
            id: string;
            email: string | null;
            role: import("@prisma/client").$Enums.UserRole;
            phone: string | null;
        };
        shop: {
            id: string;
            name: string;
            isActive: boolean;
            city: string;
            state: string;
            pincode: string;
            status: import("@prisma/client").$Enums.ShopStatus;
            approvedAt: Date | null;
        };
        reusedAdmin: boolean;
    }>;
    createSuperadmin(req: AuthedRequest, dto: CreateSuperadminDto): Promise<{
        created: boolean;
        user: {
            id: string;
            email: string | null;
            phone: string | null;
            role: import("@prisma/client").$Enums.UserRole;
            name: string | null;
            isActive: boolean;
            permissions: import("@prisma/client/runtime/library").JsonValue;
            createdAt: Date;
        };
    }>;
    listUsers(req: AuthedRequest, page?: string, limit?: string, q?: string, role?: string, isActive?: string): Promise<{
        page: number;
        limit: number;
        total: number;
        items: {
            shops: any[];
            id: string;
            email: string | null;
            phone: string | null;
            role: import("@prisma/client").$Enums.UserRole;
            name: string | null;
            tokenVersion: number;
            isActive: boolean;
            deactivatedAt: Date | null;
            shopId: string | null;
            permissions: import("@prisma/client/runtime/library").JsonValue;
            createdAt: Date;
            updatedAt: Date;
            shop: {
                id: string;
                name: string;
            } | null;
            ownedShops: {
                id: string;
                name: string;
            }[];
            subadminShops: {
                shop: {
                    id: string;
                    name: string;
                };
            }[];
        }[];
    }>;
    setUserActive(req: AuthedRequest, id: string, dto: SetUserActiveDto): Promise<{
        updated: boolean;
        user: {
            id: string;
            role: import("@prisma/client").$Enums.UserRole;
            tokenVersion: number;
            isActive: boolean;
            deactivatedAt: Date | null;
        };
    }>;
    updateManagedUser(req: AuthedRequest, id: string, dto: UpdateManagedUserDto): Promise<{
        updated: boolean;
        user: {
            id: string;
            email: string | null;
            phone: string | null;
            role: import("@prisma/client").$Enums.UserRole;
            name: string | null;
            isActive: boolean;
            deactivatedAt: Date | null;
            shopId: string | null;
            permissions: import("@prisma/client/runtime/library").JsonValue;
            createdAt: Date;
            updatedAt: Date;
        };
    }>;
    approveShop(id: string): Promise<{
        approved: boolean;
        shop: {
            id: string;
            name: string;
            isActive: boolean;
            deactivatedAt: Date | null;
            city: string;
            status: import("@prisma/client").$Enums.ShopStatus;
            approvedAt: Date | null;
            rejectedAt: Date | null;
            rejectedReason: string | null;
        };
    }>;
    rejectShop(id: string, dto: RejectShopDto): Promise<{
        rejected: boolean;
        shop: {
            id: string;
            name: string;
            isActive: boolean;
            deactivatedAt: Date | null;
            status: import("@prisma/client").$Enums.ShopStatus;
            approvedAt: Date | null;
            rejectedAt: Date | null;
            rejectedReason: string | null;
        };
    }>;
    setShopActive(id: string, dto: SetShopActiveDto): Promise<{
        updated: boolean;
        shop: {
            id: string;
            name: string;
            isActive: boolean;
            deactivatedAt: Date | null;
            status: import("@prisma/client").$Enums.ShopStatus;
            approvedAt: Date | null;
            rejectedAt: Date | null;
            rejectedReason: string | null;
        };
    }>;
    setShopStatus(id: string, dto: SetShopStatusDto): Promise<{
        approved: boolean;
        shop: {
            id: string;
            name: string;
            isActive: boolean;
            deactivatedAt: Date | null;
            city: string;
            status: import("@prisma/client").$Enums.ShopStatus;
            approvedAt: Date | null;
            rejectedAt: Date | null;
            rejectedReason: string | null;
        };
    } | {
        rejected: boolean;
        shop: {
            id: string;
            name: string;
            isActive: boolean;
            deactivatedAt: Date | null;
            status: import("@prisma/client").$Enums.ShopStatus;
            approvedAt: Date | null;
            rejectedAt: Date | null;
            rejectedReason: string | null;
        };
    } | {
        updated: boolean;
        shop: {
            id: string;
            name: string;
            isActive: boolean;
            deactivatedAt: Date | null;
            status: import("@prisma/client").$Enums.ShopStatus;
            approvedAt: Date | null;
            rejectedAt: Date | null;
            rejectedReason: string | null;
        };
    }>;
    resubmitShop(req: AuthedRequest, id: string): Promise<{
        resubmitted: boolean;
        shop: {
            id: string;
            name: string;
            isActive: boolean;
            deactivatedAt: Date | null;
            status: import("@prisma/client").$Enums.ShopStatus;
            approvedAt: Date | null;
            rejectedAt: Date | null;
            rejectedReason: string | null;
        };
    }>;
    deleteShop(id: string): Promise<{
        archived: boolean;
        shop: {
            id: string;
            name: string;
            isActive: boolean;
            deactivatedAt: Date | null;
            status: import("@prisma/client").$Enums.ShopStatus;
            approvedAt: Date | null;
            rejectedAt: Date | null;
            rejectedReason: string | null;
        };
    }>;
    createSubadmin(req: AuthedRequest, dto: CreateSubadminDto): Promise<{
        shops: {
            id: string;
            name: string;
        }[];
        id: string;
        email: string | null;
        phone: string | null;
        role: import("@prisma/client").$Enums.UserRole;
        shopId: string | null;
        permissions: import("@prisma/client/runtime/library").JsonValue;
        createdAt: Date;
    }>;
    listSubadmins(req: AuthedRequest): Promise<any[]>;
    updateSubadminShops(req: AuthedRequest, id: string, dto: UpdateSubadminShopsDto): Promise<{
        updated: boolean;
    }>;
    updateSubadminPermissions(req: AuthedRequest, id: string, dto: UpdateSubadminPermissionsDto): Promise<{
        updated: boolean;
    }>;
    deleteSubadmin(req: AuthedRequest, id: string): Promise<{
        deleted: boolean;
    }>;
    createCustomer(req: AuthedRequest, dto: CreateCustomerDto): Promise<any>;
    listCustomers(req: AuthedRequest, shopId?: string, page?: string, limit?: string, q?: string, isActive?: string, isCashiUser?: string, couponOnly?: string): Promise<{
        shopId: string;
        isCashiUser: boolean;
        linkedToShop: boolean;
        rewards: {
            availableCoupons: number;
            availablePoints: number;
        };
        id: string;
        email: string | null;
        phone: string | null;
        name: string | null;
        createdAt: Date;
    }[]> | Promise<{
        page: number;
        limit: number;
        total: number;
        items: any[];
    }>;
    setCustomerActive(req: AuthedRequest, id: string, dto: SetCustomerActiveDto): Promise<{
        updated: boolean;
        customer: {
            id: string;
            isActive: boolean;
            deactivatedAt: Date | null;
        };
    }>;
    lookupCustomer(req: AuthedRequest, phone?: string, id?: string, shopId?: string): Promise<any>;
    getUser(req: AuthedRequest, id: string): Promise<{
        shop: {
            plan: {
                id: string;
                name: string;
                code: string;
                currency: string;
                priceMonthly: number;
                features: import("@prisma/client/runtime/library").JsonValue;
            } | null;
            id: string;
            name: string;
            address: string;
            city: string;
            state: string;
            pincode: string;
            gstNo: string | null;
            upiId: string | null;
            adminId: string;
            admin: {
                adminSubscription: {
                    plan: {
                        id: string;
                        name: string;
                        code: string;
                        currency: string;
                        priceMonthly: number;
                        features: import("@prisma/client/runtime/library").JsonValue;
                    };
                    planExpiresAt: Date | null;
                    scheduledPlanCode: string | null;
                    scheduledPlanAt: Date | null;
                } | null;
            };
        } | null;
        id: string;
        email: string | null;
        phone: string | null;
        role: import("@prisma/client").$Enums.UserRole;
        tokenVersion: number;
        shopId: string | null;
        createdAt: Date;
        updatedAt: Date;
    }>;
}
export {};
