import { Repository } from 'typeorm';
import { Project } from './entities/project.entity.js';
import { CreateProjectDto } from './dto/create-project.dto.js';
import { UpdateProjectDto } from './dto/update-project.dto.js';
import { QueryProjectDto } from './dto/query-project.dto.js';
import { ProjectFinancialDto } from './dto/project-finance.dto.js';
import { PaginatedResponseDto } from '../common/dto/pagination.dto.js';
import { UserRole } from '../users/entities/user.entity.js';
import { Payment } from '../payments/entities/payment.entity.js';
import { Company } from '../companies/entities/company.entity.js';
import { User } from '../users/entities/user.entity.js';
import { Developer } from '../developers/entities/developer.entity.js';
import { NotificationsService } from '../notifications/notifications.service.js';
import { NotificationsGateway } from '../notifications/notifications.gateway.js';
export type ProjectStatusType = 'UNPAID' | 'PARTIALLY_PAID' | 'PAID' | 'OVERPAID';
export declare function calculatePaymentStatus(totalValue: number, totalPaid: number): ProjectStatusType;
export declare class ProjectsService {
    private projectsRepository;
    private paymentsRepository;
    private companiesRepository;
    private usersRepository;
    private developersRepository;
    private notificationsService;
    private notificationsGateway;
    constructor(projectsRepository: Repository<Project>, paymentsRepository: Repository<Payment>, companiesRepository: Repository<Company>, usersRepository: Repository<User>, developersRepository: Repository<Developer>, notificationsService: NotificationsService, notificationsGateway: NotificationsGateway);
    create(companyId: string, createProjectDto: CreateProjectDto): Promise<Project>;
    findAll(query: QueryProjectDto): Promise<PaginatedResponseDto<Project>>;
    findAllByCompany(companyId: string, query: QueryProjectDto): Promise<PaginatedResponseDto<Project>>;
    private buildQuery;
    findOne(id: string): Promise<{
        project: Project;
        financial: ProjectFinancialDto;
    }>;
    assignDevelopers(id: string, developerIds: string[], userRole: UserRole): Promise<Project>;
    findOneWithFinancial(id: string): Promise<Project & {
        financial: ProjectFinancialDto;
    }>;
    update(id: string, updateProjectDto: UpdateProjectDto, userRole: UserRole): Promise<Project>;
    remove(id: string, userRole: UserRole): Promise<void>;
    calculateFinancial(projectId: string): Promise<ProjectFinancialDto>;
    findWithFinancials(query: QueryProjectDto): Promise<PaginatedResponseDto<any>>;
}
