import "../base.api"

type (
    // The data of token information | Token信息
    TokenInfo {
        BaseIDInfo

        // 过期时间 
        ExpireAt  *int64 `json:"expireAt,optional"`
		ExpireAtStr  *string `json:"expireAtStr,optional"`

        // Token 
        Token  *string `json:"token,optional"`

        // Mac地址 
        Mac  *string `json:"mac,optional"`
    }

    // The response data of token list | Token列表数据
    TokenListResp {
        BaseDataInfo

        // Token list data | Token列表数据
        Data TokenListInfo `json:"data"`
    }

    // Token list data | Token列表数据
    TokenListInfo {
        BaseListInfo

        // The API list data | Token列表数据
        Data  []TokenInfo  `json:"data"`
    }

    // Get token list request params | Token列表请求参数
    TokenListReq {
        PageInfo

        // Token 
        Token  *string `json:"token,optional"`

        // Mac地址 
        Mac  *string `json:"mac,optional"`
    }

    // Token information response | Token信息返回体
    TokenInfoResp {
        BaseDataInfo

        // Token information | Token数据
        Data TokenInfo `json:"data"`
    }

	CheckTokenReq {
		// Token
		Token  *string `json:"token"`

		// Mac地址
		Mac  *string `json:"mac"`
	}

	CheckTokenResp {
		// 是否合法
		Valid *bool `json:"valid"`

		// Sign 签名内容
		Sign  *string `json:"sign"`

		// Timestamp 时间戳
		Timestamp  *int64 `json:"timestamp"`
	}
)

@server(
    group: token
)

service Wechat {
	// Check if token and mac are valid | 检查token和mac的合法性
	@handler checkToken
	post /token/check (CheckTokenReq) returns (CheckTokenResp)
}

@server(
	group: token
	jwt: Auth
	middleware: Authority
)

service Wechat {
	// Create token information | 创建Token
	@handler createToken
	post /token/third/create (TokenInfo) returns (BaseMsgResp)

	// Update token information | 更新Token
	@handler updateToken
	post /token/third/update (TokenInfo) returns (BaseMsgResp)

	// Delete token information | 删除Token信息
	@handler deleteToken
	post /token/third/delete (IDsReq) returns (BaseMsgResp)

	// Get token list | 获取Token列表
	@handler getTokenList
	post /token/third/list (TokenListReq) returns (TokenListResp)

	// Get token by ID | 通过ID获取Token
	@handler getTokenById
	post /token/third/detail (IDReq) returns (TokenInfoResp)
}