using System;
using System.Runtime.InteropServices;

namespace LAPS_XMLQC_Service.App_Data
{
    public class NetworkShareUtility
    {
        [DllImport("mpr.dll")]
        private static extern int WNetAddConnection2(ref NETRESOURCE netResource,
           string password, string username, int flags);

        [DllImport("mpr.dll")]
        private static extern int WNetCancelConnection2(string name, int flags, bool force);

        [StructLayout(LayoutKind.Sequential)]
        private struct NETRESOURCE
        {
            public int dwScope;
            public int dwType;
            public int dwDisplayType;
            public int dwUsage;
            public string lpLocalName;
            public string lpRemoteName;
            public string lpComment;
            public string lpProvider;
        }

        public static void ConnectToShare(string uncPath, string username, string password)
        {
            var netResource = new NETRESOURCE
            {
                dwType = 1, // RESOURCETYPE_DISK
                lpRemoteName = uncPath
            };

            // flags=0 → create connection
            int result = WNetAddConnection2(ref netResource, password, username, 0);

            if (result != 0 && result != 1219) // 1219 = already connected
            {
                throw new Exception($"Error connecting to remote share. Error code: {result}");
            }
        }

        public static void DisconnectFromShare(string uncPath)
        {
            WNetCancelConnection2(uncPath, 0, true);
        }
    }
}
