// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System.Runtime.InteropServices;
using System.Text;

using ManagedCommon;
using Peek.Common.Models;
using Peek.UI.Native;

namespace Peek.UI.Helpers
{
    public static class DefaultAppHelper
    {
        public static string TryGetDefaultAppName(string extension)
        {
            string appName = string.Empty;

            // Get the length of the app name
            uint length = 0;
            HResult ret = NativeMethods.AssocQueryString(NativeMethods.AssocF.Verify, NativeMethods.AssocStr.FriendlyAppName, extension, null, null, ref length);
            if (ret != HResult.False)
            {
                Logger.LogError($"Error when getting accessString for {extension} file: {Marshal.GetExceptionForHR((int)ret)!.Message}");
                return appName;
            }

            // Get the app name
            StringBuilder sb = new((int)length);
            ret = NativeMethods.AssocQueryString(NativeMethods.AssocF.Verify, NativeMethods.AssocStr.FriendlyAppName, extension, null, sb, ref length);
            if (ret != HResult.Ok)
            {
                Logger.LogError($"Error when getting accessString for {extension} file: {Marshal.GetExceptionForHR((int)ret)!.Message}");
                return appName;
            }

            appName = sb.ToString();
            return appName;
        }
    }
}
