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 directory from the current workspace.
    /// </summary>
    public sealed class DeleteDirectoryCapability
        : CapabilityBase<DeleteDirectoryArguments>
    {
        public override string Name =>
            "delete_directory";


        public override string Description =>
            "Deletes a directory from the current workspace. " +
            "Set recursive to true to delete a non-empty directory.";


        public override CapabilityPermission Permission =>
            CapabilityPermission.Destructive;


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


            await context.FileSystem.DeleteDirectoryAsync(
                args.Path,
                args.Recursive);


            context.CancellationToken
                .ThrowIfCancellationRequested();


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