// Bank Management Constants
// Enum cho loại ngân hàng (BankType)
export const BankType = {
  CommercialBank: 1,
  StateBank: 2,
  CooperativeBank: 3,
  ForeignBank: 4,
  PolicyBank: 5
};

// Danh sách loại ngân hàng
export const BankTypeList = [
  { Id: 1, Name: "Ngân hàng thương mại", Color: "primary" },
  { Id: 2, Name: "Ngân hàng nhà nước", Color: "success" },
  { Id: 3, Name: "Ngân hàng hợp tác xã", Color: "info" },
  { Id: 4, Name: "Ngân hàng nước ngoài", Color: "warning" },
  { Id: 5, Name: "Ngân hàng chính sách", Color: "secondary" }
];

// Enum cho trạng thái ngân hàng
export const BankStatus = {
  Active: true,
  Inactive: false
};

// Danh sách trạng thái ngân hàng
export const BankStatusList = [
  { Id: true, Name: "Hoạt động", Color: "success" },
  { Id: false, Name: "Ngừng hoạt động", Color: "danger" }
];

// Enum cho kết quả API
export const ApiResult = {
  Success: 1,
  ValidationError: 2,
  SystemError: 3
};

// Cấu hình DataTable mặc định
export const DefaultTableConfig = {
  Draw: 1,
  Start: 0,
  Length: 10,
  Search: {
    Value: "",
    Regex: false
  },
  Order: [
    {
      Column: 1,
      Dir: "asc"
    }
  ]
};

// Cấu hình cột cho DataTable
export const BankTableColumns = [
  {
    Data: "Id",
    Name: "Id",
    Searchable: false,
    Orderable: true,
    Title: "ID"
  },
  {
    Data: "BankCode",
    Name: "BankCode", 
    Searchable: true,
    Orderable: true,
    Title: "Mã ngân hàng"
  },
  {
    Data: "FullName",
    Name: "FullName",
    Searchable: true,
    Orderable: true,
    Title: "Tên đầy đủ"
  },
  {
    Data: "BrandName",
    Name: "BrandName",
    Searchable: true,
    Orderable: true,
    Title: "Tên thương hiệu"
  },
  {
    Data: "BankTypeName",
    Name: "BankTypeName",
    Searchable: true,
    Orderable: true,
    Title: "Loại ngân hàng"
  },
  {
    Data: "SwiftCode",
    Name: "SwiftCode",
    Searchable: true,
    Orderable: true,
    Title: "Mã SWIFT"
  },
  {
    Data: "IsActive",
    Name: "IsActive",
    Searchable: false,
    Orderable: true,
    Title: "Trạng thái"
  },
  {
    Data: "Actions",
    Name: "Actions",
    Searchable: false,
    Orderable: false,
    Title: "Thao tác"
  }
];

// Utility functions cho Bank Management
export const BankUtils = {
  // Lấy tên loại ngân hàng theo ID
  getBankTypeName(bankTypeId) {
    const bankType = BankTypeList.find(bt => bt.Id === bankTypeId);
    return bankType ? bankType.Name : "Không xác định";
  },

  // Lấy màu loại ngân hàng theo ID
  getBankTypeColor(bankTypeId) {
    const bankType = BankTypeList.find(bt => bt.Id === bankTypeId);
    return bankType ? bankType.Color : "secondary";
  },

  // Lấy tên trạng thái ngân hàng
  getBankStatusName(isActive) {
    const status = BankStatusList.find(s => s.Id === isActive);
    return status ? status.Name : "Không xác định";
  },

  // Lấy màu trạng thái ngân hàng
  getBankStatusColor(isActive) {
    const status = BankStatusList.find(s => s.Id === isActive);
    return status ? status.Color : "secondary";
  },

  // Format số tiền vốn điều lệ
  formatCharterCapital(amount) {
    if (!amount && amount !== 0) return "";
    
    // Chuyển đổi sang tỷ VND
    const billions = amount / 1000000000000;
    
    if (billions >= 1) {
      return `${billions.toLocaleString('vi-VN', { maximumFractionDigits: 1 })} tỷ VND`;
    } else {
      return `${(amount / 1000000000).toLocaleString('vi-VN', { maximumFractionDigits: 1 })} triệu VND`;
    }
  },

  // Format ngày thành lập
  formatEstablishedDate(dateString) {
    if (!dateString) return "";
    const date = new Date(dateString);
    return date.toLocaleDateString('vi-VN');
  },

  // Validate mã ngân hàng (6 chữ số)
  validateBankCode(bankCode) {
    if (!bankCode) return false;
    const codeStr = bankCode.toString();
    return /^\d{6}$/.test(codeStr);
  },

  // Validate mã SWIFT (8-11 ký tự)
  validateSwiftCode(swiftCode) {
    if (!swiftCode) return false;
    return /^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$/.test(swiftCode.toUpperCase());
  },

  // Tạo model mặc định cho tạo mới ngân hàng
  createDefaultBankModel() {
    return {
      Id: 0,
      BankCode: null,
      BankType: BankType.CommercialBank,
      FullName: "",
      EnglishName: "",
      BrandName: "",
      SwiftCode: "",
      Website: "",
      EstablishedDate: null,
      CharterCapital: 0,
      IsActive: true,
      Note: ""
    };
  },

  // Tạo SmartTableParam mặc định
  createDefaultSearchParam() {
    return JSON.parse(JSON.stringify(DefaultTableConfig));
  }
};

// Validation rules
export const BankValidationRules = {
  BankCode: {
    required: true,
    pattern: /^\d{6}$/,
    message: "Mã ngân hàng phải là 6 chữ số"
  },
  FullName: {
    required: true,
    minLength: 5,
    maxLength: 200,
    message: "Tên đầy đủ từ 5-200 ký tự"
  },
  BrandName: {
    required: true,
    minLength: 2,
    maxLength: 50,
    message: "Tên thương hiệu từ 2-50 ký tự"
  },
  SwiftCode: {
    required: false,
    pattern: /^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$/,
    message: "Mã SWIFT không đúng định dạng (8-11 ký tự)"
  },
  Website: {
    required: false,
    pattern: /^https?:\/\/.+/,
    message: "Website phải bắt đầu bằng http:// hoặc https://"
  },
  CharterCapital: {
    required: false,
    min: 0,
    message: "Vốn điều lệ phải >= 0"
  }
};
