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<PaymentGatewayConfigDto> PaymentGateways,
    KavenegarConfigDto Kavenegar,
    AiIntegrationsConfigDto Ai);

public record UpdatePlatformIntegrationsRequest(
    string ActivePaymentGateway,
    IReadOnlyList<UpdatePaymentGatewayRequest> PaymentGateways,
    UpdateKavenegarRequest Kavenegar,
    UpdateAiIntegrationsRequest Ai);

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);
