namespace Meezi.Admin.API.Models; public record GatewayCredentialsDto( string? Username, string? Password, string? BranchCode, string? TerminalCode, string? ClientId, string? ClientSecret, string? BaseUrl, bool HasStoredPassword, bool HasStoredClientSecret); public record PaymentGatewayConfigDto( string Id, string DisplayNameFa, bool IsEnabled, bool IsActive, string? MerchantId, string? ApiKey, bool Sandbox, bool HasStoredSecret, GatewayCredentialsDto? Credentials = null); public record KavenegarConfigDto( bool IsEnabled, string? ApiKey, string OtpTemplate, string SenderNumber, bool HasStoredApiKey); public record OpenAiIntegrationConfigDto( bool IsEnabled, string? ApiKey, string Model, bool CoffeeAdvisorEnabled, bool HasStoredApiKey); public record MeshyIntegrationConfigDto( bool IsEnabled, string? ApiKey, bool Menu3dEnabled, bool HasStoredApiKey); public record AiIntegrationsConfigDto( OpenAiIntegrationConfigDto OpenAi, MeshyIntegrationConfigDto Meshy); public record PlatformIntegrationsDto( string ActivePaymentGateway, IReadOnlyList PaymentGateways, KavenegarConfigDto Kavenegar, AiIntegrationsConfigDto Ai); public record UpdatePlatformIntegrationsRequest( string ActivePaymentGateway, IReadOnlyList PaymentGateways, // Optional: the admin UI no longer manages SMS (marketing SMS is // bring-your-own-provider per café). When null, the stored platform // Kavenegar config — still used for login OTPs — is left untouched. UpdateKavenegarRequest? Kavenegar = null, UpdateAiIntegrationsRequest? Ai = null); public record UpdateOpenAiIntegrationRequest( bool IsEnabled, string? ApiKey, string Model, bool CoffeeAdvisorEnabled); public record UpdateMeshyIntegrationRequest( bool IsEnabled, string? ApiKey, bool Menu3dEnabled); public record UpdateAiIntegrationsRequest( UpdateOpenAiIntegrationRequest OpenAi, UpdateMeshyIntegrationRequest Meshy); public record UpdatePaymentGatewayCredentialsRequest( string? Username, string? Password, string? BranchCode, string? TerminalCode, string? ClientId, string? ClientSecret, string? BaseUrl); public record UpdatePaymentGatewayRequest( string Id, bool IsEnabled, string? MerchantId, string? ApiKey, bool Sandbox, UpdatePaymentGatewayCredentialsRequest? Credentials = null); public record UpdateKavenegarRequest( bool IsEnabled, string? ApiKey, string OtpTemplate, string SenderNumber); public record AdminNotificationRowDto( string Id, string CafeId, string CafeName, string Type, string Title, string? Body, bool IsRead, DateTime CreatedAt); public record BroadcastNotificationRequest(string Title, string Body); public record BroadcastNotificationResult(int CafeCount, int NotificationCount);