using System;
using System.Threading.Tasks;
using Data.Models.Client;
using IW4MAdmin.Application.Meta;
using SharedLibraryCore;
using SharedLibraryCore.Commands;
using SharedLibraryCore.Configuration;
using SharedLibraryCore.Dtos.Meta.Responses;
using SharedLibraryCore.Interfaces;

namespace IW4MAdmin.Application.Commands;

public class AddClientNoteCommand : Command
{
    private readonly IMetaServiceV2 _metaService;

    public AddClientNoteCommand(CommandConfiguration config, ITranslationLookup layout, IMetaServiceV2 metaService) : base(config, layout)
    {
        Name = "addnote";
        Description = _translationLookup["COMMANDS_ADD_CLIENT_NOTE_DESCRIPTION"];
        Alias = "an";
        Permission = EFClient.Permission.Moderator;
        RequiresTarget = true;
        Arguments = new[]
        {
            new CommandArgument
            {
                Name = _translationLookup["COMMANDS_ARGS_PLAYER"],
                Required = true
            },
            new CommandArgument
            {
                Name = _translationLookup["COMMANDS_ARGS_NOTE"],
                Required = false
            }
        };
        
        _metaService = metaService;
    }

    public override async Task ExecuteAsync(GameEvent gameEvent)
    {
        var note = new ClientNoteMetaResponse
        {
            Note = gameEvent.Data?.Trim(),
            OriginEntityId = gameEvent.Origin.ClientId,
            ModifiedDate = DateTime.UtcNow
        };
        await _metaService.SetPersistentMetaValue("ClientNotes", note, gameEvent.Target.ClientId);
        gameEvent.Origin.Tell(_translationLookup["COMMANDS_ADD_CLIENT_NOTE_SUCCESS"]);
    }
}