using System; using System.Collections.Generic; using System.Text.Json; using System.Text.Json.Serialization; namespace Terius.Automate.Agent.Models; public sealed class RegisterRequest { [JsonPropertyName("token")] public string Token { get; init; } = string.Empty; [JsonPropertyName("agent_id")] public string AgentId { get; init; } = string.Empty; [JsonPropertyName("name")] public string Name { get; init; } = string.Empty; [JsonPropertyName("machine_name")] public string MachineName { get; init; } = string.Empty; [JsonPropertyName("version")] public string Version { get; init; } = string.Empty; } public sealed class RegisterResponse { [JsonPropertyName("ok")] public bool Ok { get; init; } [JsonPropertyName("agent_secret")] public string AgentSecret { get; init; } = string.Empty; [JsonPropertyName("error")] public string? Error { get; init; } } public sealed class HeartbeatRequest { [JsonPropertyName("name")] public string Name { get; init; } = string.Empty; [JsonPropertyName("machine_name")] public string MachineName { get; init; } = string.Empty; [JsonPropertyName("version")] public string Version { get; init; } = string.Empty; } public sealed class JobEnvelope { [JsonPropertyName("ok")] public bool Ok { get; init; } [JsonPropertyName("job")] public JobDefinition? Job { get; init; } [JsonPropertyName("error")] public string? Error { get; init; } } public sealed class JobDefinition { [JsonPropertyName("id")] public long Id { get; init; } [JsonPropertyName("automation_name")] public string AutomationName { get; init; } = string.Empty; [JsonPropertyName("input")] public JsonElement Input { get; init; } [JsonPropertyName("definition")] public List Definition { get; init; } = []; } public sealed class ActionStep { [JsonPropertyName("type")] public string Type { get; init; } = string.Empty; [JsonPropertyName("url")] public string? Url { get; init; } [JsonPropertyName("milliseconds")] public int? Milliseconds { get; init; } [JsonPropertyName("path")] public string? Path { get; init; } } public sealed class LogRequest { [JsonPropertyName("level")] public string Level { get; init; } = "info"; [JsonPropertyName("message")] public string Message { get; init; } = string.Empty; } public sealed class FinishRequest { [JsonPropertyName("success")] public bool Success { get; init; } [JsonPropertyName("result")] public object Result { get; init; } = new { }; [JsonPropertyName("error")] public string Error { get; init; } = string.Empty; } public sealed class BasicResponse { [JsonPropertyName("ok")] public bool Ok { get; init; } [JsonPropertyName("error")] public string? Error { get; init; } } public sealed record ExecutionResult(bool Success, IReadOnlyList Messages, string Error = ""); public sealed record JobExecutionSummary(long Id, string AutomationName, bool Success, DateTime FinishedAt, string Error = "");