using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BO.Utils
{
  public interface IAfterLogin
  {
    string RoleName { get; }

    Form Generate();
  }

  public static class AfterLoginUtil
  {
//
//    static List<Tuple<string, string>> roleToAssemblies = new List<Tuple<string, string>>(){new Tuple<string,string>("排宰员",@"C:\BwpB3Project\src\B3ButcherManageClient\ButcherOrder\bin\Debug\ButcherOrder"),
//  new Tuple<string,string>("过磅员",@"C:\BwpB3Project\src\B3ButcherManageClient\ButcherWeight\bin\Debug\ButcherWeight"),
//   new Tuple<string,string>("验质员",@"C:\BwpB3Project\src\B3ButcherManageClient\QualityAndOrder\bin\Debug\QualityAndOrder"),
//      new Tuple<string,string>("定级员",@"C:\BwpB3Project\src\B3ButcherManageClient\WeighAndGrading\bin\Debug\WeighAndGrading"),
//      new Tuple<string,string>("窒晕员",@"C:\BwpB3Project\src\B3ButcherManageClient\OrderConfirm\bin\Debug\OrderConfirm"),
//      new Tuple<string,string>("掉猪处理员",@"C:\BwpB3Project\src\B3ButcherManageClient\DropPigReOrder\bin\Debug\DropPigReOrder"),
//      new Tuple<string,string>("配货员",@"D:\BWP\BWPB3\src\B3ButcherManageClient\Distribution\bin\Debug\Distribution")
//      
//    };

        static List<Tuple<string, string>> roleToAssemblies = new List<Tuple<string, string>>()
        {
          new Tuple<string,string>("排宰员",@"\ButcherOrder"),
          new Tuple<string,string>("过磅员",@"ButcherWeight"),
          new Tuple<string,string>("验质员",@"QualityAndOrder"),
          new Tuple<string,string>("定级员",@"WeighAndGrading"),
          new Tuple<string,string>("窒晕员",@"OrderConfirm"),
          new Tuple<string,string>("掉猪处理员",@"DropPigReOrder"),
    //      new Tuple<string,string>("定级员",@"C:\B3\src\B3ButcherManageClient\CarcassStateWeight\bin\Debug\CarcassStateWeight")
        };



    public static Form CreateForm(string role)
    {
      var first = roleToAssemblies.FirstOrDefault(x => x.Item1 == role);
      if (first == null)
        throw new Exception("未注册的角色");
      //#if debug
//      var filePath = string.Format("{0}.dll", first.Item2);
      //#endif
      //#if !debug
       var filePath = Path.Combine(Application.StartupPath, string.Format("{0}.dll", first.Item2));
      //#endif
      if (!File.Exists(filePath))
        throw new Exception("相关模块不存在");
      var formType = typeof(IAfterLogin);
      foreach (var type in Assembly.LoadFile(filePath).GetTypes())
      {
        if (formType.IsAssignableFrom(type))
        {
          var instance = (IAfterLogin)Activator.CreateInstance(type);
          if (role == instance.RoleName)
            return instance.Generate();
        }
      }
      return null;
    }
  }
}
