// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

// <auto-generated/>

#nullable disable

using System;
using System.Collections.Generic;
using Azure.Core;

namespace NotificationHubs.Models
{
    /// <summary> Represents the Azure Notification Hubs job. </summary>
    public partial class NotificationHubJob
    {
        /// <summary> Initializes a new instance of NotificationHubJob. </summary>
        /// <param name="type"></param>
        /// <param name="outputContainerUrl"></param>
        /// <exception cref="ArgumentNullException"> <paramref name="outputContainerUrl"/> is null. </exception>
        public NotificationHubJob(NotificationHubJobType type, string outputContainerUrl)
        {
            Argument.AssertNotNull(outputContainerUrl, nameof(outputContainerUrl));

            Type = type;
            OutputContainerUrl = outputContainerUrl;
            InputProperties = new ChangeTrackingDictionary<string, string>();
            OutputProperties = new ChangeTrackingDictionary<string, string>();
        }
        /// <summary> Initializes a new instance of NotificationHubJob. </summary>
        /// <param name="jobId"></param>
        /// <param name="outputFileName"></param>
        /// <param name="failuresFileName"></param>
        /// <param name="progress"></param>
        /// <param name="type"></param>
        /// <param name="status"></param>
        /// <param name="outputContainerUrl"></param>
        /// <param name="importFileUrl"></param>
        /// <param name="inputProperties"></param>
        /// <param name="failure"></param>
        /// <param name="outputProperties"></param>
        /// <param name="createdAt"></param>
        /// <param name="updatedAt"></param>
        internal NotificationHubJob(string jobId, string outputFileName, string failuresFileName, double? progress, NotificationHubJobType type, NotificationHubJobStatus? status, string outputContainerUrl, string importFileUrl, IDictionary<string, string> inputProperties, string failure, IDictionary<string, string> outputProperties, DateTimeOffset? createdAt, DateTimeOffset? updatedAt)
        {
            JobId = jobId;
            OutputFileName = outputFileName;
            FailuresFileName = failuresFileName;
            Progress = progress;
            Type = type;
            Status = status;
            OutputContainerUrl = outputContainerUrl;
            ImportFileUrl = importFileUrl;
            InputProperties = inputProperties;
            Failure = failure;
            OutputProperties = outputProperties;
            CreatedAt = createdAt;
            UpdatedAt = updatedAt;
        }

        public string JobId { get; set; }

        public string OutputFileName { get; set; }

        public string FailuresFileName { get; set; }

        public double? Progress { get; set; }

        public NotificationHubJobType Type { get; set; }

        public NotificationHubJobStatus? Status { get; set; }

        public string OutputContainerUrl { get; set; }

        public string ImportFileUrl { get; set; }

        public IDictionary<string, string> InputProperties { get; }

        public string Failure { get; set; }

        public IDictionary<string, string> OutputProperties { get; }

        public DateTimeOffset? CreatedAt { get; set; }

        public DateTimeOffset? UpdatedAt { get; set; }
    }
}
