package org.wso2.carbon.device.mgt.ios.payload.beans;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.wso2.carbon.device.mgt.ios.payload.exception.ProfileConfigurationException;

import java.util.List;

@ApiModel(value = "WIFi",
        description = "Information related to WIFI configuration.")
public class WIFI extends PayloadOperation {

    @ApiModelProperty(name = "SSID",
            value = "SSID.", required = true)
    private String SSID;
    @ApiModelProperty(name = "hiddenNetwork",
            value = "Hidden Network.", required = true)
    private Boolean hiddenNetwork;
    @ApiModelProperty(name = "autoJoin",
            value = "Auto join.", required = true)
    private Boolean autoJoin;
    // WEP, WPA, Any, and None.
    @ApiModelProperty(name = "encryptionType",
            value = "Encrypted Type.", required = true)
    private EncryptionType encryptionType;
    @ApiModelProperty(name = "hotspot",
            value = "Hotspot.", required = true)
    private Boolean hotspot;
    @ApiModelProperty(name = "domainName",
            value = "Domain name", required = true)
    private String domainName;
    @ApiModelProperty(name = "serviceProviderRoamingEnabled",
            value = "Enable/Disable Service provider Roaming.", required = true)
    private Boolean serviceProviderRoamingEnabled;
    @ApiModelProperty(name = "displayedOperatorName",
            value = "Display Operation Name.", required = true)
    private String displayedOperatorName;
    // None, Manual or Auto
    @ApiModelProperty(name = "proxyType",
            value = "Type of the proxy.", required = true)
    private ProxyType proxyType;
    @ApiModelProperty(name = "roamingConsortiumOIs",
            value = "RoamingConsortiumOIs.", required = true)
    private List<String> roamingConsortiumOIs;
    @ApiModelProperty(name = "NAIRealmNames",
            value = "NAIRealmNames.", required = true)
    private List<String> NAIRealmNames;
    @ApiModelProperty(name = "MCCAndMNCs",
            value = "MCCAndMNC.", required = true)
    private List<String> MCCAndMNCs;

    //If the EncryptionType field is set to WEP, WPA, or ANY, the following fields may also be provided
    @ApiModelProperty(name = "password",
            value = "password.", required = true)
    private String password;
    @ApiModelProperty(name = "clientConfiguration",
            value = "Client configuration.", required = true)
    private EAPClientConfiguration clientConfiguration;
    @ApiModelProperty(name = "payloadCertificateUUID",
            value = "Payload certificate UUID.", required = true)
    private String payloadCertificateUUID;

    //If the ProxyType field is set to Manual, the following fields must also be provided:
    @ApiModelProperty(name = "proxyServer",
            value = "ProxyServer.", required = true)
    private String proxyServer;
    @ApiModelProperty(name = "proxyPort",
            value = "Port of the proxy.", required = true)
    private Integer proxyPort;
    @ApiModelProperty(name = "proxyUsername",
            value = "Proxy-user name.", required = true)
    private String proxyUsername;
    @ApiModelProperty(name = "proxyPassword",
            value = "Proxy-password.", required = true)
    private String proxyPassword;
    @ApiModelProperty(name = "proxyPACURL",
            value = "Proxy PACURL.", required = true)
    private String proxyPACURL;
    @ApiModelProperty(name = "proxyPACFallbackAllowed",
            value = "Allow/Disallow proxy PAC fallback.", required = true)
    private Boolean proxyPACFallbackAllowed;

    @Override
    public void validateRequest() throws ProfileConfigurationException {


    }

    public String getSSID() {
        return SSID;
    }

    public void setSSID(String SSID) {
        this.SSID = SSID;
    }

    public Boolean getHiddenNetwork() {
        return hiddenNetwork;
    }

    public void setHiddenNetwork(Boolean hiddenNetwork) {
        this.hiddenNetwork = hiddenNetwork;
    }

    public Boolean getAutoJoin() {
        return autoJoin;
    }

    public void setAutoJoin(Boolean autoJoin) {
        this.autoJoin = autoJoin;
    }

    public EncryptionType getEncryptionType() {
        return encryptionType;
    }

    public void setEncryptionType(EncryptionType encryptionType) {
        this.encryptionType = encryptionType;
    }

    public Boolean getHotspot() {
        return hotspot;
    }

    public void setHotspot(Boolean hotspot) {
        this.hotspot = hotspot;
    }

    public String getDomainName() {
        return domainName;
    }

    public void setDomainName(String domainName) {
        this.domainName = domainName;
    }

    public Boolean getServiceProviderRoamingEnabled() {
        return serviceProviderRoamingEnabled;
    }

    public void setServiceProviderRoamingEnabled(Boolean serviceProviderRoamingEnabled) {
        this.serviceProviderRoamingEnabled = serviceProviderRoamingEnabled;
    }

    public String getDisplayedOperatorName() {
        return displayedOperatorName;
    }

    public void setDisplayedOperatorName(String displayedOperatorName) {
        this.displayedOperatorName = displayedOperatorName;
    }

    public ProxyType getProxyType() {
        return proxyType;
    }

    public void setProxyType(ProxyType proxyType) {
        this.proxyType = proxyType;
    }

    public List<String> getRoamingConsortiumOIs() {
        return roamingConsortiumOIs;
    }

    public void setRoamingConsortiumOIs(List<String> roamingConsortiumOIs) {
        this.roamingConsortiumOIs = roamingConsortiumOIs;
    }

    public List<String> getNAIRealmNames() {
        return NAIRealmNames;
    }

    public void setNAIRealmNames(List<String> NAIRealmNames) {
        this.NAIRealmNames = NAIRealmNames;
    }

    public List<String> getMCCAndMNCs() {
        return MCCAndMNCs;
    }

    public void setMCCAndMNCs(List<String> MCCAndMNCs) {
        this.MCCAndMNCs = MCCAndMNCs;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public EAPClientConfiguration getClientConfiguration() {
        return clientConfiguration;
    }

    public void setClientConfiguration(EAPClientConfiguration clientConfiguration) {
        this.clientConfiguration = clientConfiguration;
    }

    public String getPayloadCertificateUUID() {
        return payloadCertificateUUID;
    }

    public void setPayloadCertificateUUID(String payloadCertificateUUID) {
        this.payloadCertificateUUID = payloadCertificateUUID;
    }

    public String getProxyServer() {
        return proxyServer;
    }

    public void setProxyServer(String proxyServer) {
        this.proxyServer = proxyServer;
    }

    public Integer getProxyPort() {
        return proxyPort;
    }

    public void setProxyPort(Integer proxyPort) {
        this.proxyPort = proxyPort;
    }

    public String getProxyUsername() {
        return proxyUsername;
    }

    public void setProxyUsername(String proxyUsername) {
        this.proxyUsername = proxyUsername;
    }

    public String getProxyPassword() {
        return proxyPassword;
    }

    public void setProxyPassword(String proxyPassword) {
        this.proxyPassword = proxyPassword;
    }

    public String getProxyPACURL() {
        return proxyPACURL;
    }

    public void setProxyPACURL(String proxyPACURL) {
        this.proxyPACURL = proxyPACURL;
    }

    public Boolean getProxyPACFallbackAllowed() {
        return proxyPACFallbackAllowed;
    }

    public void setProxyPACFallbackAllowed(Boolean proxyPACFallbackAllowed) {
        this.proxyPACFallbackAllowed = proxyPACFallbackAllowed;
    }
}
