// EN: Domain events for Shop aggregate.
// VI: Domain events cho Shop aggregate.

using MediatR;
using MerchantService.Domain.AggregatesModel.ShopAggregate;

namespace MerchantService.Domain.Events;

/// <summary>
/// EN: Raised when a new shop is created.
/// VI: Được phát ra khi shop mới được tạo.
/// </summary>
public record ShopCreatedDomainEvent(Shop Shop) : INotification;

/// <summary>
/// EN: Raised when a shop is published (made visible to customers).
/// VI: Được phát ra khi shop được công khai (hiển thị với khách hàng).
/// </summary>
public record ShopPublishedDomainEvent(Shop Shop) : INotification;

/// <summary>
/// EN: Raised when a shop is permanently closed.
/// VI: Được phát ra khi shop đóng cửa vĩnh viễn.
/// </summary>
public record ShopClosedDomainEvent(Shop Shop) : INotification;

/// <summary>
/// EN: Raised when a new branch is added to a shop.
/// VI: Được phát ra khi chi nhánh mới được thêm vào shop.
/// </summary>
public record ShopBranchAddedDomainEvent(Shop Shop, ShopBranch Branch) : INotification;

/// <summary>
/// EN: Raised when a shop is set as the default/primary shop for a merchant.
/// VI: Được phát ra khi shop được đặt làm shop mặc định/chính cho merchant.
/// </summary>
public record ShopSetAsDefaultDomainEvent(Shop Shop) : INotification;

/// <summary>
/// EN: Raised when shop ownership is transferred to another merchant.
/// VI: Được phát ra khi quyền sở hữu shop được chuyển cho merchant khác.
/// </summary>
public record ShopTransferredDomainEvent(Shop Shop, Guid PreviousMerchantId, Guid NewMerchantId) : INotification;
