using System;
using System.Data;
using System.Configuration;
using System.Collections.Generic;
using System.IO;
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>
/// 업로드 처리 결과를 저장하는 클래스 입니다.
/// </summary>
[Serializable]
public class UploadResult
{
    protected string _filePath;
    protected string _fileName;
    protected long _fileSize;
    protected string _virusName;
    protected bool _infected;
    protected string _resultMsg;
    protected string _userData;
    protected string _contentType;

    public UploadResult(string filePath)
    {
        _filePath = filePath;
        _fileName = Path.GetFileName(filePath);
        _fileSize = 0;
        _virusName = "";
        _infected = false;
        _resultMsg = "";
    }

    public UploadResult(string filePath, string contentType)
    {
        _filePath = filePath;
        _fileName = Path.GetFileName(filePath);
        _fileSize = 0;
        _virusName = "";
        _infected = false;
        _resultMsg = "";
        _contentType = contentType;
    }

    /// <summary>
    /// 완전한 경로명을 포함한 파일명
    /// </summary>
    public string FilePath
    {
        get { return _filePath; }
    }

    /// <summary>
    /// 경로가 없는 파일명
    /// </summary>
    public string FileName
    {
        get { return _fileName; }
        set { _fileName = value; }
    }

    /// <summary>
    /// 파일 크기(바이트)
    /// </summary>
    public long FileSize
    {
        get { return _fileSize; }
        set { _fileSize = value; }
    }

    /// <summary>
    /// 바이러스 이름
    /// </summary>
    public string VirusName
    {
        get { return _virusName; }
        set { _virusName = value; }
    }

    /// <summary>
    /// 바이러스 처리 결과
    /// </summary>
    public string ResultMsg
    {
        get { return _resultMsg; }
        set { _resultMsg = value; }
    }

    /// <summary>
    /// 바이러스 감염 여부
    /// </summary>
    public bool Infected
    {
        get { return _infected; }
        set { _infected = value; }
    }

    /// <summary>
    /// 사용자 데이터 - 사용처에서 필요에 따라 정의
    /// </summary>
    public string UserData
    {
        get { return _userData; }
        set { _userData = value; }
    }

    /// <summary>
    /// MIME 형식
    /// </summary>
    public string ContentType
    {
        get { return _contentType; }
        set { _contentType = value; }
    }
}

/// <summary>
/// 업로드 결과를 저장하는 리스트
///  - 부모 창과 팝업창 사이의 UploadResultList 오브젝트 전달은 Session을 사용한다.
/// </summary>
[Serializable]
public class UploadResultList : List<UploadResult>
{
    public UploadResultList()
    {
    }

    /// <summary>
    /// filePath와 일치하는 파일을 찾아 리스트에서 제거한다.
    ///  - WebTemp에 저장되어 있는 임시 파일도 삭제한다.
    /// </summary>
    /// <param name="filePath"></param>
    /// <returns></returns>
    public bool Remove(string filePath)
    {
        foreach (UploadResult result in this)
        {
            if (result.FilePath == filePath)
            {
                Remove(result);
                try
                {
                    File.Delete(filePath);
                }
                catch
                {
                }
                return true;
            }
        }
        return false;
    }
}