using System.Threading.Tasks;

using AIRuntime.Runtime.Capabilities;
using AIRuntime.Runtime.Capabilities.Permissions;
using AIRuntime.Runtime.Filesystem.Models;


namespace AIRuntime.Runtime.Filesystem
{
    /// <summary>
    /// Deletes a file from the current workspace.
    /// </summary>
    public sealed class DeleteFileCapability
        : CapabilityBase<FileSystemPathArguments>
    {
        public override string Name =>
            "delete_file";


        public override string Description =>
            "Deletes a file from the current workspace. Missing files are treated as already deleted.";


        public override CapabilityPermission Permission =>
            CapabilityPermission.Destructive;


        protected override async Task<object> ExecuteAsync(
            FileSystemPathArguments args,
            CapabilityContext context)
        {
            context.CancellationToken
                .ThrowIfCancellationRequested();


            await context.FileSystem.DeleteFileAsync(
                args.Path);


            context.CancellationToken
                .ThrowIfCancellationRequested();


            return "File deleted successfully: " +
                   args.Path;
        }
    }
}
