//==============================================================
//  版权所有：深圳杰文科技
//  文件名：PubCodeHandler.cs
//  版本：V1.0  
//  创建者：Jay  ( QQ： 85363208 )
//  创建时间：2017-11-28 16:18
//  创建描述：
//  修改者：
//  修改时间：
//  修改说明： 
//==============================================================

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using Framework.DomainBase;
using Infrastructure.Utilities;

namespace Framework.HandlerBase
{
	public class PubCodeHandler : DbHandler
	{
		public string[] GetNames()
		{
			//优先以文件列表为主。
			string path = Path.Combine(ServiceContext.CurrentPath, "PubCode.lst");
			if (File.Exists(path))
			{
				return File.ReadAllLines(path);
			}

			//如果没有文件列表，那么取PubCodeType。
			if (ServiceContext.PubCodeType != null)
			{
				List<string> list = new List<string>();
				foreach (FieldInfo fi in ServiceContext.PubCodeType.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy))
				{
					string name = (string)fi.GetValue(null);
					list.Add(name);
				}
				return list.ToArray();
			}

			var r = db.PubCode.Select(a => a.CodeType).Distinct().ToArray();
			return r;
		}

		public string Get(string codeType)
		{
			string where = new QueryBuilder().Equal("CodeType", codeType).ToString();
			PubCode code = db.Query<PubCode>(where).FirstOrDefault();
			return code == null ? "" : code.CodeName;
		}

		public PubCode Get(string codeType, string codeName)
		{
			string where = new QueryBuilder()
				.Equal("CodeType", codeType)
				.Equal("CodeName", codeName)
				.ToString();
			return db.Get<PubCode>(where);
		}

		public List<PubCode> QueryByType(string codeType)
		{
			string where = new QueryBuilder().Equal("CodeType", codeType).ToString();
			return db.Query<PubCode>(where);
		}

		public List<string> QueryNameByType(string codeType)
		{
			List<PubCode> list = QueryByType(codeType);
			return list.Select(a => a.CodeName).ToList();
		}

		public void Save(PubCode code)
		{
			new DbServiceContainer(db).Create<PubCodeService>().Save(code);
		}

		public void Delete(PubCode code)
		{
			new DbServiceContainer(db).Create<PubCodeService>().Delete(code);
		}

	}
}
