using LifePayment.Domain.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LifePayment.EntityFrameworkCore
{
    public static class ModelDbContextModelBuilderExtensions
    {
        public static void ConfigureModels([NotNull] this ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Area>(entity =>
            {
                entity.ToTable("BaseArea");

                entity.Property(e => e.Id).ValueGeneratedNever();

                entity.HasComment("行政区域表");

                entity.Property(e => e.Id)
                    .ValueGeneratedNever()
                    .HasComment("区域主键");

                entity.Property(e => e.AreaCode).HasComment("区域编码");

                entity.Property(e => e.AreaName)
                    .HasMaxLength(50)
                    .IsUnicode(false)
                    .HasComment("区域名称");

                entity.Property(e => e.ConcurrencyStamp).HasMaxLength(40);

                entity.Property(e => e.CreationTime)
                    .HasColumnType("datetime")
                    .HasDefaultValueSql("(getdate())");

                entity.Property(e => e.Description)
                    .HasMaxLength(200)
                    .IsUnicode(false)
                    .HasComment("备注");

                entity.Property(e => e.IsEnable)
                    .IsRequired()
                    .HasDefaultValueSql("((1))");

                entity.Property(e => e.LastModificationTime).HasColumnType("datetime");

                entity.Property(e => e.Layer).HasComment("层次");

                entity.Property(e => e.ParentId).HasComment("父级主键");

                entity.Property(e => e.QuickQuery)
                    .HasMaxLength(200)
                    .IsUnicode(false)
                    .HasComment("快速查询");

                entity.Property(e => e.SimpleSpelling)
                    .HasMaxLength(200)
                    .IsUnicode(false)
                    .HasComment("简拼");

                entity.Property(e => e.SortCode).HasComment("排序码");
            });

            modelBuilder.Entity<Role>(entity =>
            {
                entity.ToTable("Role");

                entity.Property(e => e.Id)
                    .ValueGeneratedNever()
                    .HasComment("角色Id");

                entity.Property(e => e.Name).HasComment("名称");

                entity.Property(e => e.IsEnable).HasComment("是否可用");

                entity.Property(e => e.Sequence).HasComment("排序");

                entity.Property(e => e.DepartmentId).HasComment("部门Id");

                entity.Property(e => e.Remark).HasComment("备注");
            });

            modelBuilder.Entity<UserRole>(entity =>
            {
                entity.ToTable("UserRole");

                entity.Property(e => e.Id).ValueGeneratedNever();

                entity.Property(e => e.UserId).HasComment("用户Id");

                entity.Property(e => e.RoleId).HasComment("角色Id");
            });
            modelBuilder.Entity<User>(entity =>
            {
                entity.ToTable("User");

                entity.Property(e => e.Id)
                    .ValueGeneratedNever()
                    .HasComment("用户Id");

                entity.Property(e => e.Amount)
                    .HasColumnType("decimal(18, 2)")
                    .HasComment("账户余额");

                entity.Property(e => e.ClientId).HasComment("用户端Id");

                entity.Property(e => e.CreationTime).HasComment("创建时间/注册时间");

                entity.Property(e => e.CreatorId).HasComment("创建人Id");

                entity.Property(e => e.DeleterId).HasComment("删除人Id");

                entity.Property(e => e.DeletionTime).HasComment("删除时间");

                entity.Property(e => e.IsDeleted).HasComment("是否删除");

                entity.Property(e => e.IsLocked)
                    .IsRequired()
                    .HasDefaultValueSql("(CONVERT([bit],(0)))")
                    .HasComment("账户是否锁住(是否禁用),默认为0未锁住即未禁用");

                entity.Property(e => e.LastModificationTime).HasComment("修改时间");

                entity.Property(e => e.LastModifierId).HasComment("修改人Id");

                entity.Property(e => e.OpenId).HasComment("小程序OpenId");

                entity.Property(e => e.PhoneNumber).HasComment("用户手机号");

                entity.Property(e => e.Name).HasComment("名称");

                entity.Property(e => e.UserName)
                    .IsRequired()
                    .HasComment("登录用户名");

                entity.Property(e => e.Remark).HasComment("备注");
            });
        }
    }
}