package com.my.web.controller.system;

import java.util.List;

import com.my.common.core.domain.model.LoginUser;
//import com.my.task.SyncH4ARoleTask;
import com.my.quartz.domain.SysJob;
import com.my.quartz.service.ISysJobService;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import com.my.common.annotation.Log;
import com.my.common.core.controller.BaseController;
import com.my.common.core.domain.AjaxResult;
import com.my.common.core.domain.entity.SysDept;
import com.my.common.core.domain.entity.SysUser;
import com.my.common.core.page.TableDataInfo;
import com.my.common.enums.BusinessType;
import com.my.system.service.ISysDeptService;
import com.my.system.service.ISysUserService;

/**
 * 用户信息
 *
 * @author ruoyi
 */
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController
{
    @Autowired
    private ISysUserService userService;

//    @Autowired
//    private ISysRoleService roleService;

    @Autowired
    private ISysDeptService deptService;

//    @Autowired
//    private ISysPostService postService;

    //    @Autowired
//    private SyncH4AUserTask userTask;
    @Autowired
    private ISysJobService jobService;

//    @Autowired
//    private SyncH4ARoleTask roleTask;

    /**
     * 获取用户列表
     */
//    @PreAuthorize("@ss.hasPermi('SYSTEM_USER_LIST')")
    @GetMapping("/list")
    public TableDataInfo list(SysUser user){
        LoginUser loginUser = getLoginUser();
        if(user == null || user.getDeptId() == null || user.getDeptId() == 0){
            if(!"1".equals(loginUser.getOrgType())){ // 非总关用户 只能查询本单位
                Long orgId = loginUser.getOrgId();
                user.setDeptId(orgId);
            }
        }
        startPage();
        List<SysUser> list = userService.selectUserList(user);
        return getDataTable(list);
    }

    @Log(title = "用户管理", businessType = BusinessType.UPDATE )
//    @PreAuthorize("@ss.hasPermi('SYSTEM_USER_SYNCH')")
    @GetMapping("/userSynch")
    public AjaxResult userSynch() throws SchedulerException {
//        userTask.syncUser();
        SysJob job = jobService.selectJobById(5l);
        jobService.run(job);
        return success(true);
    }

    @Log(title = "用户管理", businessType = BusinessType.UPDATE )
//    @PreAuthorize("@ss.hasPermi('SYSTEM_ROLE_SYNCH')")
    @GetMapping("/roleSynch")
    public AjaxResult roleSynch()
    {
//        roleTask.syncMenuAndRole();
        return success(true);
    }

    /**
     * 修改用户
     */
//    @PreAuthorize("@ss.hasPermi('system:user:edit')")
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody SysUser user){
        return success(userService.updateUserType(user.getUserId().toString(), user.getUserType()));
    }

    /**
     * 获取部门树列表
     */
//    @PreAuthorize("@ss.hasPermi('SYSTEM_USER_LIST')")
    @GetMapping("/deptTree")
    public AjaxResult deptTree(SysDept dept){
        Long orgId = getLoginUser().getOrgId();
        SysDept sysDept = deptService.selectDeptById(orgId);
        dept.setOriginalSort(sysDept.getOriginalSort());
        return success(deptService.selectDeptTreeList(dept));
    }

    /**
     * 委托审批
     * @param userId
     * @param type 1-委托，2-取消委托
     * @return
     */
    @GetMapping("/depute")
    public AjaxResult depute(Long userId, @RequestParam("type") String type){
        return success(userService.deputeExamine(type,userId ));
    }









//
//    /**
//     * 根据用户编号获取详细信息
//     */
//    @PreAuthorize("@ss.hasPermi('SYSTEM_USER_QUERY')")
//    @GetMapping(value = { "/", "/{userId}" })
//    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
//    {
//        userService.checkUserDataScope(userId);
//        AjaxResult ajax = AjaxResult.success();
//        List<SysRole> roles = roleService.selectRoleAll();
//        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
//        ajax.put("posts", postService.selectPostAll());
//        if (StringUtils.isNotNull(userId))
//        {
//            SysUser sysUser = userService.selectUserById(userId);
//            ajax.put(AjaxResult.DATA_TAG, sysUser);
//            ajax.put("postIds", postService.selectPostListByUserId(userId));
//            ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
//        }
//        return ajax;
//    }
//
//    /**
//     * 根据用户编号获取授权角色
//     */
//    @PreAuthorize("@ss.hasPermi('SYSTEM_USER_QUERY')")
//    @GetMapping("/authRole/{userId}")
//    public AjaxResult authRole(@PathVariable("userId") Long userId)
//    {
//        AjaxResult ajax = AjaxResult.success();
//        SysUser user = userService.selectUserById(userId);
//        List<SysRole> roles = roleService.selectRolesByUserId(userId);
//        ajax.put("user", user);
//        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
//        return ajax;
//    }
//
//    /**
//     * 用户授权角色
//     */
//    @PreAuthorize("@ss.hasPermi('system:user:edit')")
//    @Log(title = "用户管理", businessType = BusinessType.GRANT)
//    @PutMapping("/authRole")
//    public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
//    {
//        userService.checkUserDataScope(userId);
//        roleService.checkRoleDataScope(roleIds);
//        userService.insertUserAuth(userId, roleIds);
//        return success();
//    }
//
//    /**
//     * 修改用户
//     */
//    @PreAuthorize("@ss.hasPermi('system:user:edit')")
//    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
//    @PutMapping
//    public AjaxResult edit(@Validated @RequestBody SysUser user){
//        userService.checkUserAllowed(user);
//        userService.checkUserDataScope(user.getUserId());
//        deptService.checkDeptDataScope(user.getDeptId());
//        roleService.checkRoleDataScope(user.getRoleIds());
//        if (!userService.checkUserNameUnique(user))
//        {
//            return error("修改用户'" + user.getUserName() + "'失败，登录账号已存在");
//        }
//        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
//        {
//            return error("修改用户'" + user.getUserName() + "'失败，手机号码已存在");
//        }
//        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
//        {
//            return error("修改用户'" + user.getUserName() + "'失败，邮箱账号已存在");
//        }
//        user.setUpdateBy(getUsername());
//        return toAjax(userService.updateUser(user));
//    }

}
