"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UpdateContactCommandHandler = void 0;
const ContactMapper_1 = require("../../DTOs/Mappers/ContactMapper");
class UpdateContactCommandHandler {
    constructor(contactRepo) {
        this.contactRepo = contactRepo;
    }
    async execute(cmd) {
        try {
            const existingContact = await this.contactRepo.findById(cmd.id);
            if (!existingContact) {
                throw new Error('Contact not found');
            }
            const updateData = {};
            if (cmd.adminResponse !== undefined) {
                updateData.adminResponse = cmd.adminResponse;
                updateData.responseDate = new Date();
            }
            if (cmd.state !== undefined) {
                updateData.state = cmd.state;
            }
            if (cmd.respondedBy !== undefined) {
                updateData.respondedBy = cmd.respondedBy;
            }
            const updated = await this.contactRepo.update(cmd.id, updateData);
            if (!updated) {
                throw new Error('Failed to update contact');
            }
            return ContactMapper_1.ContactMapper.toDetailDto(updated);
        }
        catch (error) {
            if (error instanceof Error && error.message === 'Contact not found') {
                throw error;
            }
            throw new Error('Failed to update contact');
        }
    }
}
exports.UpdateContactCommandHandler = UpdateContactCommandHandler;
//# sourceMappingURL=UpdateContactCommandHandler.js.map