using System.Threading.Tasks;

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


namespace AIRuntime.Runtime.Filesystem
{
    /// <summary>
    /// Gets metadata for a workspace file or directory.
    /// </summary>
    public sealed class GetFileInfoCapability
        : CapabilityBase<FileSystemPathArguments>
    {
        public override string Name =>
            "get_file_info";


        public override string Description =>
            "Returns metadata for a file or directory in the current workspace, including whether it exists.";


        public override CapabilityPermission Permission =>
            CapabilityPermission.ReadOnly;


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


            FileInfoModel info =
                await context.FileSystem.GetFileInfoAsync(
                    args.Path);


            context.CancellationToken
                .ThrowIfCancellationRequested();


            return info;
        }
    }
}
