using Lada.Framework.Data.Domains.Finance;
using Lada.Framework.Data.Enums;
using Lada.Framework.Data.Repositories;
using Microsoft.Extensions.Logging;

namespace Ladaer.BackEnd.Infrastructures.Services.Finance
{
    /// <summary>
    /// Service để seed dữ liệu ngân hàng
    /// </summary>
    public class BankSeedService
    {
        private readonly IRepository<Bank> _bankRepository;
        private readonly ILogger<BankSeedService> _logger;

        public BankSeedService(
            IRepository<Bank> bankRepository,
            ILogger<BankSeedService> logger)
        {
            _bankRepository = bankRepository;
            _logger = logger;
        }

        /// <summary>
        /// Seed dữ liệu ngân hàng từ danh sách cung cấp
        /// </summary>
        public async Task<bool> SeedBankDataAsync()
        {
            try
            {
                // Kiểm tra xem đã có dữ liệu chưa
                var existingBanks = _bankRepository.Query();
                if (existingBanks.Any())
                {
                    _logger.LogInformation("Bank data already exists. Skipping seed.");
                    return true;
                }

                var banks = GetBankData();

                await _bankRepository.InsertManyAsync(banks);

                _logger.LogInformation($"Successfully seeded {banks.Count} banks.");
                return true;
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error occurred while seeding bank data.");
                return false;
            }
        }

        /// <summary>
        /// Lấy dữ liệu ngân hàng từ danh sách được cung cấp
        /// </summary>
        private List<Bank> GetBankData()
        {
            var banks = new List<Bank>
            {
                new Bank
                {
                    FullName = "Ngân hàng TMCP Ngoại Thương Việt Nam",
                    BankCode = "VCB",
                    BrandName = "Vietcombank",
                    DisplayOrder = 1,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng TMCP Việt Nam Thịnh Vượng",
                    BrandName = "VPBank",
                    BankCode = "VPBank",
                    DisplayOrder = 2,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng TMCP Kỹ Thương",
                    BrandName = "Techcombank",
                    BankCode="TCB",
                    DisplayOrder = 3,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng TMCP Đầu tư và Phát triển Việt Nam",
                    BrandName = "BIDV",
                    BankCode = "BIDV",
                    DisplayOrder = 4,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng TMCP Quân Đội",
                    BrandName = "MBBANK",
                    BankCode = "MB",
                    DisplayOrder = 5,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng TMCP Công thương Việt Nam",
                    BrandName = "VietinBank",
                    BankCode = "Vietin",
                    DisplayOrder = 6,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng NN&PT Nông thôn Việt Nam",
                    BrandName = "Agribank",
                    BankCode = "Agribank",
                    DisplayOrder = 7,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng TMCP Á Châu",
                    BrandName = "ACB",
                    BankCode = "ACB",
                    DisplayOrder = 8,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng TMCP Sài Gòn – Hà Nội",
                    BrandName = "SHB",
                    BankCode = "SHB",
                    DisplayOrder = 9,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng TMCP Phát triển Thành phố Hồ Chí Minh",
                    BrandName = "HDBank",
                    BankCode = "HDBank",
                    DisplayOrder = 10,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng TMCP Lộc Phát Việt Nam",
                    BrandName = "LVBank",
                    BankCode = "LVBank",
                    DisplayOrder = 11,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng TMCP Quốc Tế",
                    BrandName = "VIB",
                    BankCode = "VIB",
                    DisplayOrder = 12,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng TMCP Đông Nam Á",
                    BrandName = "SeABank",
                    BankCode = "SeABank",
                    DisplayOrder = 13,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng TMCP Tiên Phong",
                    BrandName = "TPBank",
                    BankCode = "TPBank",
                    DisplayOrder = 14,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                },
                new Bank
                {
                    FullName = "Ngân hàng TMCP Hàng Hải",
                    BrandName = "MSB",
                    BankCode = "MSB",
                    DisplayOrder = 15,
                    CreatedTime = DateTimeOffset.Now,
                    CreatedBy = 1,
                    CreatedByUserName = "System"
                }
            };

            return banks;
        }
    }
}
