using System; using System.Collections.Generic; namespace D3ROVoice.Api.Dtos; // Auth DTOs public record RegisterDto(string Email, string Password); public record LoginDto(string Email, string Password); public record AuthResponseDto(string Token, string Email, string Role, DateTime ExpiresAt); public record UserInfoDto(int Id, string Email, string Role, DateTime CreatedAt, DateTime? LastLoginAt, bool IsActive); // License issuance audit trail (offline Ed25519 license keys issued from the admin console) public record LicenseAuditDto( string LicenseId, string CustomerEmail, string Tier, string Validity, long? ExpiresAt); // LLM DTOs public record LlmGenerateRequest(string Prompt, string? Model = null, string? SystemPrompt = null, double Temperature = 0.7, int MaxTokens = 2048); public record LlmGenerateResponse(string Text, string Model, int PromptTokens, int CompletionTokens, double TotalDurationMs, decimal Cost); public record LlmChatMessage(string Role, string Content); public record LlmChatRequest(List Messages, string? Model = null, double Temperature = 0.7, int MaxTokens = 2048); // Admin DTOs public record CreateModelEndpointDto( string ModelId, string ModelName, string Provider, string EndpointUrl, string ApiKey, decimal CostPer1kPromptTokens, decimal CostPer1kCompletionTokens, string? Memo = null ); public record UpdateModelEndpointDto( string ModelName, string Provider, string EndpointUrl, string ApiKey, decimal CostPer1kPromptTokens, decimal CostPer1kCompletionTokens, bool IsActive, string? Memo = null ); public record ServerStatsDto( int TotalUsers, int ActiveUsersToday, int TotalRequests, decimal TotalCost, double ServerUptimeSeconds, int ErrorCount, List RecentErrors ); public record ServerErrorLogDto(int Id, string ErrorType, string Message, string? Endpoint, DateTime CreatedAt); public record UsageReportDto( int TotalRequests, int TotalPromptTokens, int TotalCompletionTokens, decimal TotalCost, List UserSummaries, List ModelSummaries ); public record UserUsageSummaryDto(int UserId, string Email, int TotalRequests, int TotalTokens, decimal TotalCost); public record ModelUsageSummaryDto(string ModelId, string ModelName, int TotalRequests, int TotalTokens, decimal TotalCost); // STT DTOs public record SttTranscribeRequest( string? AudioBase64 = null, string? Language = "ko", string? InitialPrompt = null, string? ModelId = null, string? Provider = null, double? Temperature = 0.0 ); public record SttTranscribeResponse( string Text, double Confidence, string Language, double DurationSeconds, string Provider, string ModelId, double LatencyMs, decimal Cost ); public record SttProviderEndpointDto( int Id, string Name, string ProviderType, string EndpointUrl, string ApiKey, string ModelId, string Method, string Language, string? Prompt, double Temperature, decimal CostPerMinute, decimal CostPerSecond, bool IsDefault, bool IsActive, int FallbackPriority, string? ExtraHeadersJson, DateTime CreatedAt, DateTime? UpdatedAt ); public record CreateSttEndpointDto( string Name, string ProviderType, string EndpointUrl, string? ApiKey, string ModelId, string Method, string? Language, string? Prompt, double Temperature, decimal CostPerMinute, decimal CostPerSecond, bool IsDefault, bool IsActive, int FallbackPriority, string? ExtraHeadersJson, string? Memo = null ); public record UpdateSttEndpointDto( string Name, string ProviderType, string EndpointUrl, string? ApiKey, string ModelId, string Method, string? Language, string? Prompt, double Temperature, decimal CostPerMinute, decimal CostPerSecond, bool IsDefault, bool IsActive, int FallbackPriority, string? ExtraHeadersJson, string? Memo = null ); public record AdminActionDto(string? Memo); public record SttTestResultDto( bool Success, string Message, double LatencyMs, string? TranscriptPreview, string? Provider, string? ModelId ); public record DirectSttTestDto(string EndpointUrl, string? ApiKey); public record SttUsageReportDto( int TotalTranscriptions, double TotalAudioMinutes, decimal TotalCost, double AvgLatencyMs, List ProviderSummaries, List UserSummaries ); public record SttProviderUsageSummaryDto( string Provider, string ModelId, int TotalRequests, double TotalAudioMinutes, decimal TotalCost, double AvgLatencyMs ); public record SttUserUsageSummaryDto( int UserId, string Email, int TotalRequests, double TotalAudioMinutes, decimal TotalCost );