package org.jeecg.modules.apiService.impl;

import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.api.vo.Result;
import org.jeecg.config.shiro.ShiroRealm;
import org.jeecg.modules.apiBean.PageBean;
import org.jeecg.modules.apiService.JobService;
import org.jeecg.modules.employAuthenticationCompany.entity.EmployAuthenticationCompany;
import org.jeecg.modules.employAuthenticationCompany.service.IEmployAuthenticationCompanyService;
import org.jeecg.modules.employAuthenticationPerson.entity.EmployAuthenticationPerson;
import org.jeecg.modules.employAuthenticationPerson.service.IEmployAuthenticationPersonService;
import org.jeecg.modules.employCategory.entity.EmployCategory;
import org.jeecg.modules.employCategory.service.IEmployCategoryService;
import org.jeecg.modules.employJob.entity.EmployJob;
import org.jeecg.modules.employJob.service.IEmployJobService;
import org.jeecg.modules.employResume.entity.EmployResume;
import org.jeecg.modules.hanHaiMember.entity.HanHaiMember;
import org.jeecg.modules.hanHaiMember.service.IHanHaiMemberService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class JobServiceImpl implements JobService {

    /******************************************************************************************************************/
    //权限验证
    @Resource
    private ShiroRealm shiroRealm;

    @Resource
    private IEmployJobService employJobService;

    @Resource
    private IEmployCategoryService employCategoryService;

    @Resource
    private IEmployAuthenticationCompanyService employAuthenticationCompanyService;

    @Resource
    private IEmployAuthenticationPersonService employAuthenticationPersonService;

    @Resource
    private IHanHaiMemberService hanHaiMemberService;
    /******************************************************************************************************************/

    //工作信息-查询工作信息列表
    @Override
    public Result<?> queryJobList(EmployJob employJob, PageBean pageBean) {
        //返回信息
        String message = "获取工作信息列表失败!";
        //工作信息列表
        Page<EmployJob> pageList = null;
        //分页信息
        Page<EmployJob> page = null;

        try{
            //分页
            page = new Page<EmployJob>(pageBean.getPageNo(), pageBean.getPageSize());
            LambdaQueryChainWrapper<EmployJob> query = employJobService.lambdaQuery();

            //组装查询条件
            if(null != employJob.getCategoryOne()){
                //工作地域
                query.eq(EmployJob::getCategoryOne, employJob.getCategoryOne());
            }
            //按时间倒序
            query.orderByDesc(EmployJob::getCreateTime);

            //获取工作信息列表
            pageList = query.page(page);

            for (EmployJob record : pageList.getRecords()) {
                //2、获取用户实名信息
                EmployAuthenticationPerson person = employAuthenticationPersonService
                        .lambdaQuery()
                        .eq(EmployAuthenticationPerson::getUserId, record.getUserId())
                        .one();
                if(null != person){
                    record.setEmployAuthenticationPerson(person);
                }

                //3、获取用户信息信息
                HanHaiMember hanHaiMember = hanHaiMemberService.getById(record.getUserId());
                record.setHanHaiMember(hanHaiMember);

            }

            //判断执行结果
            if(null != pageList){
                message = "工作列表信息";
            }else {
                message = "工作列表信息为空";
            }

            //返回执行结果
            return Result.OK(message, pageList);

        }catch (Exception e){
            //错误信息打印
            e.printStackTrace();
            return Result.error(message, pageList);
        }
    }

    //工作信息-根据Id查看工作详情
    @Override
    public Result<?> queryJobById(String token, String jobId) {
//        //权限验证
//        HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token);

        //返回信息
        EmployJob job = null;

        try{
            //1、查看工作详情信息
            job = employJobService.getById(jobId);

            if(null == job){
                return Result.error("未查询到工作详情，请检查id", job);
            }

            //分类信息
            EmployCategory categoryOne = employCategoryService.getById(job.getCategoryOne());
            job.setCategoryOne(categoryOne.getName());
            EmployCategory categoryTwo = employCategoryService.getById(job.getCategoryTwo());
            job.setCategoryTwo(categoryTwo.getName());

            //结算方式
            switch (job.getPayType()){
                case "0":
                    job.setPayType("微信支付");
                    break;
                case "1":
                    job.setPayType("支付宝支付");
                    break;
                case "2":
                    job.setPayType("线下结算");
                    break;
            }


            //2、获取用户实名信息
            EmployAuthenticationPerson person = employAuthenticationPersonService
                    .lambdaQuery()
                    .eq(EmployAuthenticationPerson::getUserId, job.getUserId())
                    .one();
            if(null != person){
                job.setEmployAuthenticationPerson(person);
            }

            //2、获取企业实名信息
            EmployAuthenticationCompany company = employAuthenticationCompanyService
                    .lambdaQuery()
                    .eq(EmployAuthenticationCompany::getUserId, job.getUserId())
                    .one();
            if(null != company){
                job.setEmployAuthenticationCompany(company);
            }

            //3、用户信息
            HanHaiMember hanHaiMember = hanHaiMemberService.getById(job.getUserId());
            job.setHanHaiMember(hanHaiMember);

            return Result.OK("工作详情", job);
        }catch (Exception e){
            e.printStackTrace();
            return Result.error("工作详情获取失败", job);
        }
    }

    //工作信息-我的发布
    @Override
    public Result<?> queryJobListByUserId(String token, PageBean pageBean) {
        //权限验证
        HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token);

        try{
            //查询我的招工列表信息
            Page<EmployJob> page = new Page<EmployJob>(pageBean.getPageNo(), pageBean.getPageSize());
            Page<EmployJob> pageList = employJobService
                    .lambdaQuery()
                    .eq(EmployJob::getUserId, hanHaiMember.getId())
                    .page(page);

            return Result.OK("我的招工", pageList);
        }catch (Exception e){
            e.printStackTrace();
            return Result.OK("我的招工列表查询失败");
        }
    }

    //工作信息-添加工作信息
    @Override
    public Result<?> addJob(String token, EmployJob employJob) {
        //权限验证
        HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token);
        employJob.setUserId(hanHaiMember.getId());
        //根据用户标识判断用户是否通过实名认证企业信息，没有通过实名认证信息则不能发布工作岗位信息
        EmployAuthenticationCompany authenticationCompany = employAuthenticationCompanyService
                .lambdaQuery()
                .eq(EmployAuthenticationCompany::getUserId, hanHaiMember.getId())
                .eq(EmployAuthenticationCompany::getStatus, "1")
                .one();
        if(null == authenticationCompany){
            return Result.error("未进行企业实名认证或企业实名认证审核未通过，请先去进行企业实名认证");
        }
        //哥谭局用户标识判断用户是否通过企业实名认证，没有通过实名认证信息则不能发布工作岗位信息
        EmployAuthenticationPerson authenticationPerson = employAuthenticationPersonService
                .lambdaQuery()
                .eq(EmployAuthenticationPerson::getUserId, hanHaiMember.getId())
                .eq(EmployAuthenticationPerson::getStatus, "1")
                .one();
        if(null == authenticationPerson){
            return Result.error("未进行个人实名认证或个人实名认证审核未通过，请先去进行个人实名认证");
        }
        employJobService.save(employJob);
        return Result.OK("工作信息添加成功");
//        employJob.setUserId(hanHaiMember.getId());
//        //返回信息
//        String message = "工作信息添加失败";
//        //执行结果
//        boolean result = false;
//
//        try{
////            //1、判断用户是否通过个人实名认证企业信息，没有通过实名认证信息则不能发布工作岗位信息
//            EmployAuthenticationPerson authenticationPerson = employAuthenticationPersonService
//                    .lambdaQuery()
//                    .eq(EmployAuthenticationPerson::getUserId, hanHaiMember.getId())
//                    .eq(EmployAuthenticationPerson::getStatus, "1")
//                    .one();
//            if(null == authenticationPerson){
//                return Result.error("未进行个人实名认证或个人实名认证审核未通过，请先去进行个人实名认证");
//            }
//
//            //2、判断用户是否通过企业实名认证信息，没有通过实名认证信息则不能发布工作岗位信息
//            EmployAhthenticationCompany ahthenticationCompany = employAhthenticationCompanyService
//                    .lambdaQuery()
//                    .eq(EmployAhthenticationCompany::getUserId, hanHaiMember.getId())
//                    .eq(EmployAhthenticationCompany::getStatus, "1")
//                    .one();
//            if(null == ahthenticationCompany){
//                return Result.error("未进行企业实名认证或企业实名认证审核未通过，请先去进行企业实名认证");
//            }else {
//                //查询企业信息
//                EmployCompany company = employCompanyService
//                        .lambdaQuery()
//                        .eq(EmployCompany::getSocialCode, ahthenticationCompany.getSocialCode())
//                        .one();
//                if(null != company){
//                    employJob.setCompany(company.getId());//工作信息关联公司
//                    if(null == employJob.getWorkAddress()){
//                        employJob.setWorkAddress(company.getAddress());//如果没有填写工作地址，则默认为公司地址
//                    }
//                }else {
//                    return Result.error("未查询到企业信息，工作发布失败");
//                }
//
//            }
//
//            //3、执行工作信息添加
//            result = employJobService.save(employJob);
//
//            //判断执行结果
//            if(result){
//                message = "工作信息添加成功！";
//            }else {
//                message = "工作信息添加失败！";
//            }
//
//            //4、返回执行结果
//            return Result.OK(message);
//
//        }catch (Exception e){
//            //错误信息打印
//            e.printStackTrace();
//            return Result.error(message);
//        }
    }

    //工作信息-修改工作信息
    @Override
    public Result<?> updateJob(String token, EmployJob employJob) {
        //权限验证
        HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token);
        //返回信息
        String message = "工作信息修改失败";
        //执行结果
        boolean result = false;

        try{
            //执行工作信息修改
            result = employJobService.updateById(employJob);

            //判断执行结果
            if(result){
                message = "工作信息修改成功！";
            }else {
                message = "工作信息修改失败！";
            }

            //返回执行结果
            return Result.OK(message);

        }catch (Exception e){
            //错误信息打印
            e.printStackTrace();
            return Result.error(message);
        }
    }

    //工作信息-删除工作信息
    @Override
    public Result<?> deleteJob(String token, String jobId) {
        //权限验证
        HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token);
        //返回信息
        String message = "工作信息删除失败";
        //执行结果
        boolean result = false;

        try{
            //执行工作信息删除
            result = employJobService.removeById(jobId);

            //判断执行结果
            if(result){
                message = "工作信息删除成功！";
            }else {
                message = "工作信息删除失败！";
            }

            //返回执行结果
            return Result.OK(message);

        }catch (Exception e){
            //错误信息打印
            e.printStackTrace();
            return Result.error(message);
        }
    }
}
