/*
 * *********************************************************************************************************************
 *
 *          !!
 *        .F88X
 *        X8888Y
 *      .}888888N;
 *        i888888N;        .:!              .I$WI:
 *          R888888I      .'N88~            i8}+8Y&8"l8i$8>8W~'>W8}8]KW+8IIN"8&
 *          .R888888I    .;N8888~          .X8'  "8I.!,/8"  !%NY8`"8I8~~8>,88I
 *            +888888N;  .8888888Y                                  "&&8Y.}8,
 *            ./888888N;  .R888888Y        .'}~    .>}'.`+>  i}!    "i'  +/'  .'i~  !11,.:">,  .~]!  .i}i
 *              ~888888%:  .I888888l      .]88~`1/iY88Ii+1'.R$8$8]"888888888>  Y8$  W8E  X8E  W8888'188Il}Y88$*
 *              18888888    E8888881    .]W%8$`R8X'&8%++N8i,8N%N8+l8%`  .}8N:.R$RE%N88N%N$K$R  188,FE$8%~Y88I
 *            .E888888I  .i8888888'      .:$8I;88+`E8R:/8N,.>881.`$8E/1/]N8X.Y8N`"KF&&FK!'88*."88K./$88%RN888+~
 *            8888888I  .,N888888~        ~88i"8W,!N8*.I88.}888%F,i$88"F88"  888:E8X.>88!i88>`888*.}Fl1]*}1YKi'
 *          i888888N'      I888Y          ]88;/EX*IFKFK88X  K8R  .l8W  88Y  ~88}'88E&%8W.X8N``]88!.$8K  .:W8I
 *        .i888888N;        I8Y          .&8$  .X88!  i881.:%888>I88  ;88]  +88+.';;;;:.Y88X  18N.,88l  .+88/
 *      .:R888888I
 *      .&888888I                                          Copyright (c) 2009-2020.  博锐尚格科技股份有限公司
 *        ~8888'
 *        .!88~                                                                     All rights reserved.
 *
 * *********************************************************************************************************************
 */

package com.persagy.server.sso.interceptors

//import org.apache.shiro.SecurityUtils
//import org.apache.shiro.authc.UsernamePasswordToken
//import org.apache.shiro.subject.Subject
import org.slf4j.LoggerFactory
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse

class SessionInterceptor : HandlerInterceptorAdapter() {
    companion object {
        // 日志
        private val logger = LoggerFactory.getLogger(SessionInterceptor::class.java)
    } // Companion object

    override fun preHandle(request: HttpServletRequest, response: HttpServletResponse, handler: Any): Boolean {
        println("URL=${request.requestURI.toString()}")
        if (request.requestURI.indexOf("swagger-") > 0 ||
                request.requestURI.endsWith(".png") ||
                request.requestURI.endsWith(".jpg")
                ) {
            return super.preHandle(request, response, handler)
        }

        val token = request.getHeader("sso-token")
        //val token = request.getParameter("token")

        logger.debug("sso-token=$token")
        if (token == null) {
            response.writer.write("{\"result\":\"unauthc\",\"message\":\"no token\"}")
            //writeJson(response, "{\"result\":\"unauthc\",\"message\":\"no token\"}")
            return false
        }

        try {
//            val subject = SecurityUtils.getSubject()
//            if (subject.isAuthenticated) {
//                try {
//                    val user = subject.principal as User
////                    if (!userModel.getToken().equalsIgnoreCase(token)) {
////                        return checkToken(subject, token, response)
//////                    }
//                } catch (e1: Exception) {
//                    return checkToken(subject, token, response)
//                }
//            } else {
//                return checkToken(subject, token, response)
//            }
        } catch (e: Exception) {
            e.printStackTrace()
            logger.error("login check error: {}", e)
            return false
        }

        return true
    } // Function preHandle()

//    private fun checkToken(subject: Subject, token: String, response: HttpServletResponse): Boolean {
//        val resp = SSoClient.tokenCheck(token)
//        logger.info("token check resp: ${resp.toJson()}")
//        if (resp.result != "success") {
//            logger.error("go to login")
//            response.writer.write(resp.toJson())
//            //writeJson(response, resp.toJson())
//            return false
//        }
//
//        val userId = resp.id
//        val user: User? = User()
//        user?.id = resp.id
//        user?.userName = resp.userName
//
//        if (user == null) {
//            // 用户不存在
//            val r = BaseResponse("")
//            response.writer.write("{\"result\": \"nouser\"}")
//            //writeJson(response, "{\"result\": \"nouser\"}")
//            return false
//        } else {
//            logger.error("=================================================================")
//            SPageContext.setAttribute("User", resp)
//            val user = SPageContext.getAttribute("User") as TokenCheckResponse?
//            logger.error("user = ${user?.toJson()}")
//            val token = UsernamePasswordToken(resp.id, "password")
//            subject.login(token)
//        }
//        return true
//    } // Function checkToken()


//    fun writeJson(response: HttpServletResponse, json: String) {
//        response.contentType = "application/json;charset=UTF-8"
//        var out: PrintWriter? = null
//        try {
//            out = response.writer
//            out!!.print(json)
//            out.flush()
//        } catch (e: IOException) {
//            e.printStackTrace()
//        } finally {
//            out?.close()
//        }
//    }
} // Class SessionInterceptor
