using System;
using System.Collections;
using System.IO;
using Microsoft.Win32;

using sscs.cache;
using sscs.common;
using sscs.constants;

namespace sscs.common
{
    internal class WinUser : User
    {
		private string m_sUserHome = "";

        internal WinUser()
        {
        }

        internal WinUser(UserIdentifier winUserId)
        {            
            userId = winUserId;			
            secretStore = new SecretStore(this);            
        }
   
        override internal void SetUserName(string username)
        {
            userName = username;
        }

        override internal string GetUserName()
        {
            return userName;
        }
        
        /* A method to find the user's home dir on windows needs to be added.
         */
        override internal string GetUserHomeDir()
        {
			CSSSLogger.DbgLog("WinUser:GetUserHomeDir - Entered");
			if (m_sUserHome == null || m_sUserHome.Length < 1)
			{
				CSSSLogger.DbgLog("WinUser:GetUserHomeDir is empty");
				//Console.WriteLine("read registry");
				// get the users home drive and homepath from the registry
				// 
				string sSIDString = ((WinUserIdentifier)userId).GetSID();
				
				// look up Profile path
				// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-1757981266-436374069-725345543-1006]
				CSSSLogger.DbgLog("Reading Reg: SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\" + sSIDString);
				string sProfile = ReadRegKey(Registry.LocalMachine, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\" + sSIDString, "ProfileImagePath");

				if (sProfile == null)									
					CSSSLogger.DbgLog("WinUser:GetUserHomeDir get Profile return null");
				else
					m_sUserHome = sProfile;

				//string sHomeDrive = ReadRegKey(Registry.Users, sSIDString+"\\Volatile Environment", "HOMEDRIVE");
				//string sHomeDir = ReadRegKey(Registry.Users, sSIDString+"\\Volatile Environment", "HOMEPATH");
				//m_sUserHome = sHomeDrive+sHomeDir;
				//Console.WriteLine("Homedir: "+ m_sUserHome);
			}
			
			CSSSLogger.DbgLog("WinUser:GetUserHomeDir - Exited: "+m_sUserHome);

            return m_sUserHome;
        }

		private string ReadRegKey(RegistryKey rk, string sSubKey, string KeyName)
		{
			// Opening the registry key
			// RegistryKey rk = Registry.Users;
			// Open a subKey as read-only
			RegistryKey sk1 = rk.OpenSubKey(sSubKey);
			// If the RegistrySubKey doesn't exist -> (null)
			if ( sk1 == null )
			{
				return null;
			}
			else
			{
				try 
				{
					// If the RegistryKey exists I get its value
					// or null is returned.
					return (string)sk1.GetValue(KeyName.ToUpper());
				}
				catch (Exception e)
				{
					//ShowErrorMessage(e, "Reading registry " + KeyName.ToUpper());
					return null;
				}
			}
		}



    }
}