"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.PaymentService = void 0;
const common_1 = require("@nestjs/common");
const typeorm_1 = require("typeorm");
const typeorm_2 = require("@nestjs/typeorm");
const payment_entity_1 = require("../../common/payment/payment.entity");
let PaymentService = class PaymentService {
    constructor(paymentsRepository) {
        this.paymentsRepository = paymentsRepository;
    }
    create(createPaymentDto) {
        const payment = this.paymentsRepository.create(createPaymentDto);
        return this.paymentsRepository.save(payment);
    }
    async findByUserId(userId) {
        return this.paymentsRepository.find({
            where: { userId: userId },
            order: { createdAt: 'DESC' },
        });
    }
    async findByShopId(shopId) {
        return this.paymentsRepository.find({
            where: { shopId: shopId },
            order: { createdAt: 'DESC' },
        });
    }
    async findByDriverId(driverId) {
        return await this.paymentsRepository
            .createQueryBuilder('payment')
            .leftJoin('users', 'user', 'user.id = payment.driverId')
            .leftJoin('shops', 'shop', 'shop.id = payment.shopId')
            .leftJoin('booking', 'booking', 'booking.id = payment.bookingId')
            .select([
            'payment.id AS id',
            'payment.userId AS userId',
            'payment.driverId AS driverId',
            'payment.shopId AS shopId',
            'payment.bookingId AS bookingId',
            'payment.transactionId AS transactionId',
            'payment.amount AS amount',
            'payment.totalMinutes AS totalMinutes',
            'payment.totalKm AS totalKm',
            'payment.createdAt AS createdAt',
            'user.name AS driverName',
            'shop.name AS shopName',
            'booking.pickupLatitude',
            'booking.pickupLongitude',
            'booking.dropLatitude',
            'booking.dropLongitude',
            'booking.pickupPlace',
            'booking.dropPlace',
        ])
            .where('payment.driverId = :driverId', { driverId })
            .orderBy('payment.createdAt', 'DESC')
            .getRawMany();
    }
    findOne(id) {
        return this.paymentsRepository.findOneBy({ id });
    }
};
exports.PaymentService = PaymentService;
exports.PaymentService = PaymentService = __decorate([
    (0, common_1.Injectable)(),
    __param(0, (0, typeorm_2.InjectRepository)(payment_entity_1.Payment)),
    __metadata("design:paramtypes", [typeorm_1.Repository])
], PaymentService);
//# sourceMappingURL=payment.service.js.map