import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { Prisma, RentalAgreementStatus } from '@prisma/client';
export interface CreateRentalAgreementInput {
    robotUnitId: string;
    customerId: string;
    startAt: Date | string;
    endAt: Date | string;
    monthlyRate: number;
    currencyCode: string;
    contractAttachmentId?: string;
}
export declare class RentalService {
    private readonly prisma;
    private readonly logger;
    constructor(prisma: PrismaService);
    private monthsBetween;
    createAgreement(input: CreateRentalAgreementInput, userId: string, organizationId: string): Promise<{
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.RentalAgreementStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        version: number;
        startAt: Date;
        currencyCode: string;
        robotUnitId: string;
        customerId: string;
        endAt: Date;
        periodMonths: number;
        monthlyRate: Prisma.Decimal;
        contractAttachmentId: string | null;
    }>;
    findAll(q: {
        status?: RentalAgreementStatus;
        customerId?: string;
        robotUnitId?: string;
        page?: number;
        limit?: number;
    }): Promise<{
        items: ({
            _count: {
                schedules: number;
            };
        } & {
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.RentalAgreementStatus;
            updatedAt: Date;
            deletedAt: Date | null;
            organizationId: string;
            createdById: string;
            version: number;
            startAt: Date;
            currencyCode: string;
            robotUnitId: string;
            customerId: string;
            endAt: Date;
            periodMonths: number;
            monthlyRate: Prisma.Decimal;
            contractAttachmentId: string | null;
        })[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
    }>;
    findOne(id: string): Promise<{
        schedules: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            dueDate: Date;
            amount: Prisma.Decimal;
            currencyCode: string;
            paidAt: Date | null;
            rentalAgreementId: string;
            paidPaymentRecordId: string | null;
        }[];
    } & {
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.RentalAgreementStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        version: number;
        startAt: Date;
        currencyCode: string;
        robotUnitId: string;
        customerId: string;
        endAt: Date;
        periodMonths: number;
        monthlyRate: Prisma.Decimal;
        contractAttachmentId: string | null;
    }>;
    terminate(id: string, _userId: string): Promise<{
        schedules: {
            id: string;
            createdAt: Date;
            updatedAt: Date;
            dueDate: Date;
            amount: Prisma.Decimal;
            currencyCode: string;
            paidAt: Date | null;
            rentalAgreementId: string;
            paidPaymentRecordId: string | null;
        }[];
    } & {
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.RentalAgreementStatus;
        updatedAt: Date;
        deletedAt: Date | null;
        organizationId: string;
        createdById: string;
        version: number;
        startAt: Date;
        currencyCode: string;
        robotUnitId: string;
        customerId: string;
        endAt: Date;
        periodMonths: number;
        monthlyRate: Prisma.Decimal;
        contractAttachmentId: string | null;
    }>;
    markScheduleEntryPaid(scheduleId: string, paidPaymentRecordId: string, paidAt: Date | string): Promise<{
        id: string;
        createdAt: Date;
        updatedAt: Date;
        dueDate: Date;
        amount: Prisma.Decimal;
        currencyCode: string;
        paidAt: Date | null;
        rentalAgreementId: string;
        paidPaymentRecordId: string | null;
    }>;
}
