package allied_creation_user

import (
	"time"
)

//################用户模块##################

//单体用户详情数据
type UserDetail struct {
	UserId          int    `json:"userId"`
	UserBaseId      int    `json:"userBaseId"`
	UserType        int    `json:"userType"`
	UserCode        string `json:"userCode"`
	EnableStatus    int    `json:"enableStatus"`
	CooperationInfo struct {
		CooperationCompany  string    `json:"cooperationCompany"`
		CooperationDeadline time.Time `json:"cooperationDeadline"`
	} `json:"cooperationInfo,omitempty"`
	UserInfo struct {
		Phone    string `json:"phone"`
		UserCode string `json:"userCode"`
		Email    string `json:"email"`
		UserName string `json:"userName"`
		Avatar   string `json:"avatar"`
		// 员工类型  1:固定 2:派遣 3.临时
		EmployeeType int `json:"employeeType,omitempty"`
		// IC卡号
		IcCardNumber string `json:"icCardNumber,omitempty"`
	} `json:"userInfo,omitempty"`
	Company *struct {
		CompanyId        int       `json:"companyId"`
		CompanyName      string    `json:"companyName"`
		Scale            string    `json:"scale"`
		IndustryCategory string    `json:"industryCategory"`
		RegisteredTime   time.Time `json:"registeredTime"`
		Status           int64     `json:"status"`
		Logo             string    `json:"logo"`
		Address          string    `json:"address"`
		SystemName       string    `json:"systemName"`
	} `json:"company,omitempty"`
	Org *struct {
		OrgId   int    `json:"orgId"`
		OrgCode string `json:"orgCode"`
		OrgName string `json:"orgName"`
	} `json:"org,omitempty"`
	Department *struct {
		DepartmentId   int    `json:"departmentId"`
		DepartmentName string `json:"departmentName"`
		// 部门编号
		DepartmentNumber string `json:"departmentNumber"`
	} `json:"department,omitempty"`
	UserRole []struct {
		RoleID   int    `json:"roleId"`
		RoleName string `json:"roleName"`
		RoleType int    `json:"roleType"`
		OrgId    int64  `json:"orgId"`
		Ext      struct {
			OrgName string `json:"orgName"`
		} `json:"ext,omitempty"`
	} `json:"userRole"`
	UserOrg []struct {
		OrgID     int       `json:"orgId"`
		CreatedAt time.Time `json:"createdAt"`
		UpdatedAt time.Time `json:"updatedAt"`
		DeletedAt time.Time `json:"deletedAt"`
		OrgName   string    `json:"orgName"`
	} `json:"userOrg"`
	IM struct {
		Accid       string `json:"accid"`
		ImToken     string `json:"imToken"`
		CsAccountID string `json:"csAccountId"`
	} `json:"im"`
	// 收藏的菜单(工作台)(菜单编码列表)
	FavoriteMenus []string `json:"favoriteMenus"`
	Favorite      struct {
		OrgItems    []int64 `json:"orgItems"`
		Referer     string  `json:"referer"`
		LastLogInAt int64   `json:"lastLogInAt"`
	} `json:"favorite"`
	// 创建时间
	CreatedAt time.Time `json:"createdAt,omitempty"`
}

//搜索用户列表
type (
	ReqUserSearch struct {
		// 查询偏离量
		Offset int `json:"offset"`
		// 查询限制
		Limit int `json:"limit"`
		// 用户基础id
		UserBaseId int64 ` json:"userBaseId"`
		// 企业id
		CompanyId int64 ` json:"companyId"`
		// 组织ID
		OrganizationId int64 `json:"organizationId"`
		// 部门编号
		DepartmentId int64 `json:"departmentId"`
		// 用户姓名
		UserName string `json:"userName"`
		// 共创公司
		CooperationCompany string `cname:"共创公司" json:"cooperationCompany,omitempty"`
		// 部门名称
		DepName string `json:"depName"`
		// 手机号码
		Phone string `json:"phone"`
		// 用户类型
		UserType int `cname:"用户类型 1:普通用户  2:共创用户  1024:企业注册用户" json:"userType,omitempty"`
		// 匹配多个组织
		InOrgIds []int64 `cname:"匹配多个组织" json:"inOrgIds,omitempty"`
		// 实时拉取数据 (获取最新的)
		PullRealTime bool `cname:"拉取最新数据" json:"pullRealTime,omitempty"`
		// 状态(1:启用  2:禁用  3:注销)
		EnableStatus int `cname:"状态(1:启用  2:禁用  3:注销)" json:"enableStatus,omitempty"`
		// 状态(1:启用  2:禁用  3:注销)
		InEnableStatus []int `cname:"状态(1:启用  2:禁用  3:注销)" json:"inEnableStatus,omitempty"`
		// 匹配多个公司
		InCompanyIds []interface{} `json:"inCompanyIds,omitempty"`

		// 自定义高级查询
		AdvancedQuery string `json:"advancedQuery"`
	}

	//DataUserSearch 搜索用户列表
	DataUserSearch struct {
		Count int64        `json:"count"`
		Users []UserDetail `json:"users"`
	}
)

//创建用户
type (
	ReqCreateUser struct {
		// 企业id
		CompanyId int64 `json:"companyId"`
		// 用户类型  1:企业内部用户(内部添加) 2:共创用户   1024:企业注册用户(注册添加)
		UserType int `json:"userType"`
		// 用户编号 企业内标识
		UserCode string ` json:"userCode" `
		// 组织机构
		OrganizationId int64 `json:"organizationId,omitempty" `
		// 所属部门
		DepartmentId int64 `json:"departmentId,omitempty" `
		// 用户关联的组织
		UserOrg []int64 `json:"userOrg,omitempty"`
		// 用户关联的角色
		UserRole []int64 `json:"userRole,omitempty"`
		// 共创公司
		CooperationCompany string `json:"cooperationCompany,omitempty"`
		// 共创到期时间 (yyyy-MM-dd)
		CooperationDeadline time.Time ` json:"cooperationDeadline,omitempty"`
		// 启用状态(启用:1 禁用:2)
		EnableStatus int ` json:"enableStatus,omitempty"`
		// 密码
		Password string ` json:"password" `
		// 用户姓名
		UserName string `json:"userName"`
		// 手机号码
		Phone string `json:"phone" `
		// 头像
		Avatar string `json:"avatar"`
		// 邮箱
		Email string `json:"email"`
		// 员工类型  1:固定 2:派遣 3.临时
		EmployeeType int `cname:"员工类型" json:"employeeType" valid:"Required"`
		// IC卡号
		IcCardNumber string `cname:"IC卡号" json:"icCardNumber,omitempty"`

		// 部门
		DepartmentName string `cname:"部门" json:"departmentName"`
	}
	DataCreateUser struct {
		UserId int `json:"userId"`
	}
)

//更新用户
type (
	ReqUpdateUser struct {
		UserId int64
		// 企业id
		CompanyId int64 `json:"companyId"`
		// 用户编号 企业内标识
		UserCode string ` json:"userCode" `
		// 组织机构
		OrganizationId int64 `json:"organizationId,omitempty" `
		// 所属部门
		DepartmentId int64 `json:"departmentId,omitempty" `
		// 用户关联的组织
		UserOrg []int64 `json:"userOrg,omitempty"`
		// 用户关联的角色
		UserRole []int64 `json:"userRole,omitempty"`
		// 共创公司
		CooperationCompany string `json:"cooperationCompany,omitempty"`
		// 共创到期时间 (yyyy-MM-dd)
		CooperationDeadline time.Time ` json:"cooperationDeadline,omitempty"`
		// 启用状态(启用:1 禁用:2)
		EnableStatus int ` json:"enableStatus,omitempty"`
		// 用户姓名
		UserName string `json:"userName"`
		// 手机号码
		Phone string `json:"phone" `
		// 头像
		Avatar string `json:"avatar"`
		// 邮箱
		Email string `json:"email"`
		// 员工类型  1:固定 2:派遣 3.临时
		EmployeeType int `cname:"员工类型" json:"employeeType" valid:"Required"`
		// IC卡号
		IcCardNumber string `cname:"IC卡号" json:"icCardNumber,omitempty"`
		// 运营管理扩展
		// 部门
		DepartmentName string `cname:"部门" json:"departmentName"`
	}

	DataUpdateUser struct {
	}
)

//获取用户
type (
	ReqGetUser struct {
		UserId int `json:"userId"`
	}

	DataGateUser struct {
		UserDetail
	}
)

//删除用户
type (
	ReqDeleteUser struct {
		UserId int64 `json:"userId"`
	}

	DataDeleteUser struct {
	}
)

//批量修改用户启用状态
type (
	ReqBatchEnableUser struct {
		UserIds      []int64 `json:"userIds"`
		EnableStatus int     `json:"enableStatus"` //启用状态(启用:1 禁用:2 注销:3)
	}

	DataBatchEnableUser struct {
	}
)

//批量重置密码
type (
	ReqBatchResetPasswordUser struct {
		Password string  `json:"password"`
		UserIds  []int64 `json:"userIds"`
	}
	DataBatchResetPasswordUser struct {
	}
)

//创建共创用户
type (
	ReqCreateCooperatorUser struct {
		// 企业ID
		CompanyId int64 `cname:"企业ID" json:"companyId"`
		// 共创公司
		CooperationCompany string ` json:"cooperationCompany"`
		// 共创到期时间
		CooperationDeadline time.Time `json:"cooperationDeadline"`
		// 邮箱
		Email string `json:"email"`
		// 启用状态(启用:1 禁用:2 注销:3)
		EnableStatus int `json:"enableStatus" `
		// 用户编号 企业内标识
		UserCode string `json:"userCode"`
		// 用户姓名
		UserName string ` json:"userName"`
		// 头像
		Avatar string ` json:"avatar"`
		// 组织ID
		OrgId int64 `json:"orgId"`
		// 手机号码
		Phone string `json:"phone"`
		//密码
		Password string `json:"password"`
	}
	DataCreateCooperatorUser struct {
		UserId int `json:"userId"`
	}
)

//更新共创用户
type (
	ReqUpdateCooperatorUser struct {
		UserId int64 `json:"userId"`
		// 共创公司
		CooperationCompany string ` json:"cooperationCompany"`
		// 共创到期时间
		CooperationDeadline time.Time `json:"cooperationDeadline"`
		// 邮箱
		Email string `json:"email"`
		// 启用状态(启用:1 禁用:2 注销:3)
		EnableStatus int `json:"enableStatus" `
		// 用户编号 企业内标识
		UserCode string `json:"userCode" `
		// 用户姓名
		UserName string ` json:"userName"`
		// 头像
		Avatar string ` json:"avatar"`
		// 组织ID
		OrgId int64 `json:"orgId" `
		// 手机号码
		Phone string `json:"phone" `
	}
	DataUpdateCooperatorUser struct {
	}
)

//获取用户概要数据
type (
	ReqUserProfile struct {
		UserId int64 `json:"userId"`
	}
	DataUserProfile struct {
	}
)

//更新用户基础信息数据
type (
	ReqUserUpdateBaseInfo struct {
		UserId int64 `json:"userId"`
		// 用户基础Id 用户唯一标识
		UserBaseId int64 `cname:"用户Id 用户唯一标识" json:"userBaseId" valid:"Required"`
		// 用户姓名
		UserName string `cname:"用户姓名" json:"userName" valid:"Required"`
		// 头像
		Avatar string `cname:"头像" json:"avatar" valid:"Required"`
		// 手机号码
		Phone string `cname:"手机号码" json:"phone" valid:"Required"`
		// 邮箱
		Email string `cname:"邮箱" json:"email" valid:"Required"`
	}
	DataUserUpdateBaseInfo struct {
	}
)

//返回用户有权限的菜单
type (
	ReqUserAccessMenus struct {
		UserId int `json:"userId"`
		// 当前登录组织orgId
		OrgId int64 `cname:"当前登录组织Id" json:"orgId"`
		// 菜单类别 web app
		MenuCategory string `cname:"菜单类别 web app" json:"menuCategory,omitempty"`
		// 返回所有不可以用的菜单
		ALLDisableMenu int `cname:"同时返回所有不可以用的菜单 1:包含不可用的菜单 0:过滤不可用的菜单 " json:"allDisableMenu"`
	}
	DataUserAccessMenus struct {
		Menus []struct {
			AccessCode   string `json:"accessCode"`
			Category     string `json:"category"`
			Code         string `json:"code"`
			EnableStatus int    `json:"enableStatus"`
			Icon         string `json:"icon"`
			IsPublish    int    `json:"isPublish"`
			MenuID       int    `json:"menuId"`
			MenuName     string `json:"menuName"`
			MenuType     string `json:"menuType"`
			ParentID     int    `json:"parentId"`
			ParentPath   string `json:"parentPath"`
			Remark       string `json:"remark"`
			Sort         int    `json:"sort"`
			Link         string `json:"link"`
		} `json:"menus"`
	}
)

//批量修改用户启用状态
type (
	ReqBatchAddUser struct {
		Users    []BatchAddUserItem `json:"users"`
		Password string             `json:"password"`
	}

	DataImportResponse struct {
		FailRows []interface{} `json:"failRows"`
	}

	//BatchAddUserItem struct {
	//	CompanyID       int64                           `json:"companyId"`
	//	UserType        int                             `json:"userType"`
	//	UserCode        string                          `json:"userCode"`
	//	OrganizationID  int                             `json:"organizationId"`
	//	DepartmentID    int                             `json:"departmentId"`
	//	UserInfo        BatchAddUserItemUserInfo        `json:"userInfo"`
	//	CooperationInfo BatchAddUserItemCooperationInfo `json:"cooperationInfo"`
	//}
	//BatchAddUserItemUserInfo struct {
	//	Phone    string `json:"phone"`
	//	UserName string `json:"userName"`
	//	Email    string `json:"email"`
	//	Avatar   string `json:"avatar"`
	//}
	//BatchAddUserItemCooperationInfo struct {
	//	CooperationCompany  string    `json:"cooperationCompany"`
	//	CooperationDeadline time.Time `json:"cooperationDeadline"`
	//}

	BatchAddUserItem struct {
		// 企业id
		CompanyId int64 `json:"companyId,omitempty"`
		// 用户类型  1:企业内部用户(内部添加) 2:共创用户   1024:企业注册用户(注册添加)
		UserType int `json:"userType,omitempty"`
		// 用户姓名
		UserName string `json:"userName,omitempty"`
		// 手机号码
		Phone string `json:"phone,omitempty"`
		// 邮箱
		Email string `json:"email,omitempty"`
		// 用户编号 企业内标识
		UserCode string `json:"userCode,omitempty"`
		// 组织编码
		Org string `json:"org,omitempty"`
		// 部门编码
		Department string `json:"department,omitempty"`
		// 状态(1:启用  2:禁用  3:注销)
		EnableStatus string `json:"enableStatus,omitempty"`
		// 共创公司 cooperationCompany
		CooperationCompany string `json:"cooperationCompany"`
		// 共创到期时间 (yyyy-MM-dd) cooperationDeadline
		CooperationDeadline string `json:"cooperationDeadline"`
		// 员工类型  1:固定 2:派遣 3.临时
		EmployeeType string `json:"employeeType,omitempty"`
		// IC卡号
		IcCardNumber string `json:"icCardNumber,omitempty"`
		// 失败理由
		FailReason string `json:"failReason"`
	}
)

//搜索用户列表
type (
	ReqUserBaseSearch struct {
		// 查询偏离量
		Offset int `json:"offset"`
		// 查询限制
		Limit int `json:"limit"`
		// 用户姓名
		UserName string `cname:"用户姓名" json:"userName,omitempty"`
		// 在用户列表内
		InUserBaseIds []int64 `cname:"用户姓名" json:"inUserBaseIds,omitempty"`
		// 所属组织
		OrgName string `cname:"所属组织" json:"orgName,omitempty"`
		// 关闭查询限制
		DisableLimit bool `cname:"关闭查询限制" json:"disableLimit,omitempty"`
		// 获取组织
		FetchOrgBelong bool `cname:"获取组织" json:"fetchOrgBelong,omitempty"`
	}

	//DataUserSearch 搜索用户列表
	DataUserBaseSearch struct {
		Count int64            `json:"count"`
		Users []UserBaseDetail `json:"users"`
	}

	UserBaseDetail struct {
		UserBaseId int    `json:"userBaseId"`
		LastLogIn  string `json:"lastLogIn"`
		UserInfo   struct {
			UserName string `json:"userName"`
			Phone    string `json:"phone"`
			Avatar   string `json:"avatar"`
		} `json:"userInfo"`
		Status  int    `json:"status"`
		Referer string `json:"referer"`
		UserOrg []struct {
			OrgId   int    `json:"orgId"`
			OrgName string `json:"orgName"`
		} `json:"userOrg"`
		RegistrationDate string `json:"registrationDate"`
	}
)

type (
	ReqEnableUserBase struct {
		UserBaseIds []int64 `cname:"用户id列表" json:"userBaseIds" valid:"Required"`
		// 启用状态(启用:1 禁用:2 注销:3)
		EnableStatus int `cname:"启用状态(启用:1 禁用:2 注销:3)" json:"enableStatus" valid:"Required"`
	}

	//DataUserSearch 搜索用户列表
	DataEnableUserBase = interface{}
)