"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.OfferService = void 0;
const common_1 = require("@nestjs/common");
const typeorm_1 = require("typeorm");
const typeorm_2 = require("@nestjs/typeorm");
const offer_entity_1 = require("../../common/offer/offer.entity");
const status_enum_1 = require("../../common/columntype/status.enum");
const shop_entity_1 = require("../../common/shop/shop.entity");
const shopoffer_entity_1 = require("../../common/shopoffer/shopoffer.entity");
let OfferService = class OfferService {
    constructor(offerRepository, shopsRepository, shopOfferRepository) {
        this.offerRepository = offerRepository;
        this.shopsRepository = shopsRepository;
        this.shopOfferRepository = shopOfferRepository;
    }
    async findActive(lang) {
        const today = new Date();
        const offers = await this.offerRepository.find({
            where: [
                {
                    status: status_enum_1.Status.ACTIVE,
                    startDate: (0, typeorm_1.LessThanOrEqual)(today),
                    endDate: (0, typeorm_1.MoreThanOrEqual)(today),
                },
                {
                    status: status_enum_1.Status.ACTIVE,
                    startDate: (0, typeorm_1.LessThanOrEqual)(today),
                    endDate: (0, typeorm_1.IsNull)(),
                },
            ],
            order: { createdAt: 'DESC' },
        });
        const nameField = `name_${lang}`;
        const subnameField = `subname_${lang}`;
        const descriptionField = `description_${lang}`;
        return offers.map((offer) => ({
            ...offer,
            name: offer[nameField] || offer.name,
            subname: offer[subnameField] || offer.subname,
            description: offer[descriptionField] || offer.description,
        }));
    }
    async findOne(id, lang = "en") {
        const offer = await this.offerRepository.findOneBy({ id });
        if (!offer) {
            throw new common_1.NotFoundException(`Offer with ID ${id} not found`);
        }
        const nameField = `name_${lang}`;
        const subnameField = `subname_${lang}`;
        const descriptionField = `description_${lang}`;
        const localizedOffer = {
            ...offer,
            name: offer[nameField] || offer.name,
            subname: offer[subnameField] || offer.subname,
            description: offer[descriptionField] || offer.description,
        };
        const offerShops = await this.shopOfferRepository.find({
            where: { offerId: id },
            select: ["shopId"],
        });
        const shopIds = offerShops.map((shop) => shop.shopId);
        const shops = await this.shopsRepository.findByIds(shopIds);
        return {
            ...localizedOffer,
            shops,
        };
    }
};
exports.OfferService = OfferService;
exports.OfferService = OfferService = __decorate([
    (0, common_1.Injectable)(),
    __param(0, (0, typeorm_2.InjectRepository)(offer_entity_1.Offer)),
    __param(1, (0, typeorm_2.InjectRepository)(shop_entity_1.Shop)),
    __param(2, (0, typeorm_2.InjectRepository)(shopoffer_entity_1.ShopOffer)),
    __metadata("design:paramtypes", [typeorm_1.Repository,
        typeorm_1.Repository,
        typeorm_1.Repository])
], OfferService);
//# sourceMappingURL=offer.service.js.map