using System.Text.Json.Serialization;
using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Eft.Common.Tables;
using SPTarkov.Server.Core.Models.Eft.Profile;
using SPTarkov.Server.Core.Models.Enums;
using SPTarkov.Server.Core.Models.Spt.Dialog;

namespace SPTarkov.Server.Core.Models.Spt.Config;

public record GiftsConfig : BaseConfig
{
    [JsonPropertyName("kind")]
    public override string Kind { get; set; } = "spt-gifts";

    [JsonPropertyName("gifts")]
    public required Dictionary<string, Gift> Gifts { get; set; }
}

public record Gift
{
    /// <summary>
    ///     Items to send to player
    /// </summary>
    [JsonPropertyName("items")]
    public List<Item> Items { get; set; } = [];

    /// <summary>
    ///     Who is sending the gift to player
    /// </summary>
    [JsonPropertyName("sender")]
    public GiftSenderType Sender { get; set; }

    [JsonPropertyName("senderDetails")]
    public UserDialogInfo? SenderDetails { get; set; }

    /// <summary>
    ///     Optional - supply a trader type to send from, not necessary when sending from SYSTEM or USER
    /// </summary>
    [JsonPropertyName("trader")]
    public MongoId? Trader { get; set; }

    [JsonPropertyName("messageText")]
    public string? MessageText { get; set; }

    /// <summary>
    ///     Optional - if sending text from the client locale file
    /// </summary>
    [JsonPropertyName("localeTextId")]
    public string? LocaleTextId { get; set; }

    [JsonPropertyName("associatedEvent")]
    public SeasonalEventType AssociatedEvent { get; set; }

    [JsonPropertyName("collectionTimeHours")]
    public int? CollectionTimeHours { get; set; }

    /// <summary>
    ///     Optional, can be used to change profile settings like level/skills
    /// </summary>
    [JsonPropertyName("profileChangeEvents")]
    public List<ProfileChangeEvent>? ProfileChangeEvents { get; set; }

    [JsonPropertyName("maxToSendPlayer")]
    public int? MaxToSendPlayer { get; set; }
}
