// Path: common/src/main/java/cz/gopay/api/v3/model/access/AccessToken.java
// @XmlRootElement
// @XmlAccessorType(XmlAccessType.FIELD)
// public class AccessToken {
// 
//     @XmlElement(name = "token_type")
//     private String tokenType;
// 
//     @XmlElement(name = "access_token")
//     private String accessToken;
// 
//     @XmlElement(name = "refresh_token")
//     private String refreshToken;
// 
//     @XmlElement(name = "expires_in")
//     private long expiresIn;
// 
//     public AccessToken() {
//     }
// 
//     public AccessToken(String tokenType, String accessToken, String refreshToken,
//             long expiresIn) {
//         this.tokenType = tokenType;
//         this.accessToken = accessToken;
//         this.refreshToken = refreshToken;
//         this.expiresIn = expiresIn;
//     }
// 
//     public String getTokenType() {
//         return tokenType;
//     }
// 
//     public void setTokenType(String tokenType) {
//         this.tokenType = tokenType;
//     }
// 
//     public String getAccessToken() {
//         return accessToken;
//     }
// 
//     public void setAccessToken(String accessToken) {
//         this.accessToken = accessToken;
//     }
// 
//     public String getRefreshToken() {
//         return refreshToken;
//     }
// 
//     public void setRefreshToken(String refreshToken) {
//         this.refreshToken = refreshToken;
//     }
// 
//     public long getExpiresIn() {
//         return expiresIn;
//     }
// 
//     public void setExpiresIn(long expiresIn) {
//         this.expiresIn = expiresIn;
//     }
// }
// 
// Path: common/src/main/java/cz/gopay/api/v3/model/access/AuthHeader.java
// @XmlAccessorType(XmlAccessType.FIELD)
// public class AuthHeader {
// 
//     @HeaderParam(value = "Authorization")
//     private String auhorization;
// 
//     public String getAuhorization() {
//         return auhorization;
//     }
// 
//     public void setAuhorization(String auhorization) {
//         this.auhorization = auhorization;
//     }
// 
//     @Override
//     public String toString() {
//         return "AuthHeader [authorization=" + auhorization + "]";
//     }
// 
//     public static AuthHeader build(String clientId, String clientSecret) {
//         try {
//             AuthHeader result = new AuthHeader();
// 
//             String toEncode = clientId + ":" + clientSecret;
//             String ulrEncoded = URLEncoder.encode(toEncode, "UTF-8");
//             String base64 = "Basic " + Base64.getEncoder().encodeToString(ulrEncoded.getBytes());
// 
//             result.setAuhorization(base64);
// 
//             return result;
// 
//         } catch (UnsupportedEncodingException e) {
//             throw new IllegalStateException(e.getMessage());
//         }
//     }
// 
//     public static AuthHeader build(String accessToken) {
//         AuthHeader result = new AuthHeader();
//         result.setAuhorization("Bearer " + accessToken);
// 
//         return result;
//     }
// 
// }


import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import cz.gopay.api.v3.model.access.AccessToken;
import cz.gopay.api.v3.model.access.AuthHeader;
import javax.ws.rs.BeanParam;
import javax.ws.rs.core.MediaType;
package cz.gopay.api.v3;



/**
 *
 * @author Zbynek Novak novak.zbynek@gmail.com
 *
 */
public interface AuthClient {
    
    @POST
    @Path("/oauth2/token")
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
// Path: common/src/main/java/cz/gopay/api/v3/model/access/AccessToken.java
// @XmlRootElement
// @XmlAccessorType(XmlAccessType.FIELD)
// public class AccessToken {
// 
//     @XmlElement(name = "token_type")
//     private String tokenType;
// 
//     @XmlElement(name = "access_token")
//     private String accessToken;
// 
//     @XmlElement(name = "refresh_token")
//     private String refreshToken;
// 
//     @XmlElement(name = "expires_in")
//     private long expiresIn;
// 
//     public AccessToken() {
//     }
// 
//     public AccessToken(String tokenType, String accessToken, String refreshToken,
//             long expiresIn) {
//         this.tokenType = tokenType;
//         this.accessToken = accessToken;
//         this.refreshToken = refreshToken;
//         this.expiresIn = expiresIn;
//     }
// 
//     public String getTokenType() {
//         return tokenType;
//     }
// 
//     public void setTokenType(String tokenType) {
//         this.tokenType = tokenType;
//     }
// 
//     public String getAccessToken() {
//         return accessToken;
//     }
// 
//     public void setAccessToken(String accessToken) {
//         this.accessToken = accessToken;
//     }
// 
//     public String getRefreshToken() {
//         return refreshToken;
//     }
// 
//     public void setRefreshToken(String refreshToken) {
//         this.refreshToken = refreshToken;
//     }
// 
//     public long getExpiresIn() {
//         return expiresIn;
//     }
// 
//     public void setExpiresIn(long expiresIn) {
//         this.expiresIn = expiresIn;
//     }
// }
// 
// Path: common/src/main/java/cz/gopay/api/v3/model/access/AuthHeader.java
// @XmlAccessorType(XmlAccessType.FIELD)
// public class AuthHeader {
// 
//     @HeaderParam(value = "Authorization")
//     private String auhorization;
// 
//     public String getAuhorization() {
//         return auhorization;
//     }
// 
//     public void setAuhorization(String auhorization) {
//         this.auhorization = auhorization;
//     }
// 
//     @Override
//     public String toString() {
//         return "AuthHeader [authorization=" + auhorization + "]";
//     }
// 
//     public static AuthHeader build(String clientId, String clientSecret) {
//         try {
//             AuthHeader result = new AuthHeader();
// 
//             String toEncode = clientId + ":" + clientSecret;
//             String ulrEncoded = URLEncoder.encode(toEncode, "UTF-8");
//             String base64 = "Basic " + Base64.getEncoder().encodeToString(ulrEncoded.getBytes());
// 
//             result.setAuhorization(base64);
// 
//             return result;
// 
//         } catch (UnsupportedEncodingException e) {
//             throw new IllegalStateException(e.getMessage());
//         }
//     }
// 
//     public static AuthHeader build(String accessToken) {
//         AuthHeader result = new AuthHeader();
//         result.setAuhorization("Bearer " + accessToken);
// 
//         return result;
//     }
// 
// }


// Path: common/src/main/java/cz/gopay/api/v3/AuthClient.java
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import cz.gopay.api.v3.model.access.AccessToken;
import cz.gopay.api.v3.model.access.AuthHeader;
import javax.ws.rs.BeanParam;
import javax.ws.rs.core.MediaType;

package cz.gopay.api.v3;



/**
 *
 * @author Zbynek Novak novak.zbynek@gmail.com
 *
 */
public interface AuthClient {
    
    @POST
    @Path("/oauth2/token")
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    AccessToken loginApplication(@BeanParam AuthHeader authHeader,