using System;
using System.IO;
using System.Data;
using System.Configuration;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// 파일 확장자에 따른 아이콘 이미지(16x16 gif)를 반환한다.
///  - 등록 방법: ~/Images/Ext에 확장자.gif(doc.gif, htm.gif, ...) 형식으로 파일을 추가한다.
/// </summary>
public class ExtIconMap
{
    static object _thisLock = new object();
    const string _mapName = "ExtIconMap";
    Dictionary<string, string> _extIconMap = null;


    public ExtIconMap()
    {
        lock (_thisLock)
        {
            if (HttpContext.Current.Application[_mapName] != null)
                _extIconMap = (Dictionary<string, string>)HttpContext.Current.Application[_mapName];
            else
                LoadExtIconMap();
        }
    }

    /// <summary>
    /// ~/Images/Ext에 저장되어 있는 파일 목록을 읽어 맵을 구성한다.
    /// </summary>
    protected void LoadExtIconMap()
    {
        _extIconMap = new Dictionary<string,string>();

        string path = HttpContext.Current.Server.MapPath("~/Images/Ext");
        try
        {
            string[] files = Directory.GetFiles(path, "*.gif");
            foreach (string file in files)
            {
                string key = Path.GetFileNameWithoutExtension(file);
                string value = Path.GetFileName(file);

                _extIconMap.Add("."+key, value);
            }
            HttpContext.Current.Application[_mapName] = _extIconMap;
        }
        catch (Exception)
        { 
        }
    }

    /// <summary>
    /// 확장자에 따라 아이콘 이미지 파일을 반환한다.
    /// </summary>
    /// <param name="extension">확장자.gif(doc.gif, htm.gif, ...) </param>
    /// <returns>이미지 파일 이름</returns>
    public string this[string extension]
    {
        get
        {
            if (_extIconMap != null)
            {
                string key = extension.ToLower();
                string value;
                if (_extIconMap.TryGetValue(key, out value)) return value;
            }
            return "none.gif";
        }
    }

    /// <summary>
    /// 파일이름에 해당되는 아이콘 이미지 파일을 반환한다.
    /// </summary>
    /// <param name="fileName">파일 이름</param>
    /// <returns>이미지 파일 이</returns>
    public string GetIconName(string fileName)
    {
        string ext = Path.GetExtension(fileName);
        if (ext.Length > 4)
            ext = ext.Substring(0, 4);
        return this[ext];
    }

}
