package com.example.his.api.front.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import com.example.his.api.common.result.R;
import com.example.his.api.config.sa_token.StpCustomerUtil;
import com.example.his.api.front.service.CustomerService;
import com.example.his.api.req.Customer.LoginForm;
import com.example.his.api.req.Customer.SendSmsCodeForm;
import com.example.his.api.req.FrontCustomer.updateCustomerForm;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.Map;


@RestController("FrontCustomerController")
@RequestMapping("/front/customer")
public class CustomerController {
    @Resource
    private CustomerService customerService;

    // 短信验证码
    @PostMapping("/sendSmsCode")
    public R sendSmsCode(@RequestBody @Valid SendSmsCodeForm form) {
        HashMap map = customerService.sendSmsCode(form.getTel());
        return R.success(map);
    }

    // 客户登录
    @PostMapping("/login")
    public R login(@RequestBody @Valid LoginForm form) {
        HashMap map = customerService.login(form.getTel(), form.getCode());
        boolean result = MapUtil.getBool(map, "result");
        String msg = MapUtil.getStr(map, "msg");
        HashMap hashMap = new HashMap();

        if (result) {
            // 生成令牌
            int id = MapUtil.getInt(map, "id");
            StpCustomerUtil.login(id, "PC");
            String token = StpCustomerUtil.getTokenValue();
            hashMap.put("token", token);
        }
        return result ? R.success(hashMap) : R.success(msg);
    }

    // 客户查询
    @GetMapping("/searchCustomer")
    @SaCheckLogin(type = StpCustomerUtil.TYPE)
    public R searchCustomer() {
        int id = StpCustomerUtil.getLoginIdAsInt();
        HashMap map = new HashMap();
        map.put("id", id);
        HashMap hashMap = customerService.searchCustomer(map);
        return R.success(hashMap);
    }

    // 客户更新
    @PostMapping("/updateCustomer")
    public R updateCustomer(@RequestBody @Valid updateCustomerForm form) {
        Map map = BeanUtil.beanToMap(form);
        int id = StpCustomerUtil.getLoginIdAsInt();
        map.put("id", id);
        int rows = customerService.updateCustomer(map);
        return R.success(rows);
    }

    // 订单查询数据
    @GetMapping("/searchSummary")
    public R searchSummary() {
        HashMap map = new HashMap();
        int id = StpCustomerUtil.getLoginIdAsInt();
        map.put("customerId", id);
        HashMap hashMap = customerService.searchSummary(map);
        return R.success(hashMap);
    }
}
