"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
    return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DriverReviewService = void 0;
const common_1 = require("@nestjs/common");
const typeorm_1 = require("@nestjs/typeorm");
const typeorm_2 = require("typeorm");
const driver_review_entity_1 = require("../../common/driverreview/driver-review.entity");
let DriverReviewService = class DriverReviewService {
    constructor(reviewRepo) {
        this.reviewRepo = reviewRepo;
    }
    async createReview(userId, dto) {
        if (userId === dto.driverId) {
            throw new common_1.BadRequestException("User cannot review themselves");
        }
        if (dto.rideId) {
            const existing = await this.reviewRepo.findOne({
                where: { userId, driverId: dto.driverId, rideId: dto.rideId }
            });
            if (existing)
                throw new common_1.BadRequestException("You already reviewed this ride");
        }
        const review = this.reviewRepo.create({
            ...dto,
            userId: dto.userId,
            driverId: dto.driverId,
        });
        return await this.reviewRepo.save(review);
    }
    async getDriverReviews(driverId) {
        return await this.reviewRepo.find({
            where: { driverId, status: "active" },
            order: { createdAt: "DESC" },
            relations: ["user"],
        });
    }
    async getDriverAverage(driverId) {
        const { avg, count } = await this.reviewRepo
            .createQueryBuilder("review")
            .select("AVG(review.rating)", "avg")
            .addSelect("COUNT(review.id)", "count")
            .where("review.driverId = :driverId", { driverId })
            .andWhere("review.status = :status", { status: "active" })
            .getRawOne();
        return { avgRating: parseFloat(avg) || 0, totalReviews: parseInt(count) || 0 };
    }
};
exports.DriverReviewService = DriverReviewService;
exports.DriverReviewService = DriverReviewService = __decorate([
    (0, common_1.Injectable)(),
    __param(0, (0, typeorm_1.InjectRepository)(driver_review_entity_1.DriverReview)),
    __metadata("design:paramtypes", [typeorm_2.Repository])
], DriverReviewService);
//# sourceMappingURL=driver-review.service.js.map