/*
 * Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 *
 * WSO2 Inc. licenses this file to you under the Apache License,
 * Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package org.wso2.carbon.mdm.services.android.bean.wrapper;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo;
import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@ApiModel(
        value = "DeviceInfo",
        description = "This class carries all information related to the device information provided by a device."
)
public class AndroidDeviceInfo extends DeviceInfo implements Serializable {
    private static final long serialVersionUID = 1998101733L;
    @ApiModelProperty(
            name = "IMEI",
            value = "IMEI number of the device.",
            required = true
    )
    private String IMEI;
    @ApiModelProperty(
            name = "IMSI",
            value = "IMSI number of the device.",
            required = true
    )
    private String IMSI;
    @ApiModelProperty(
            name = "deviceModel",
            value = "Model of the device.",
            required = true
    )
    private String deviceModel;
    @ApiModelProperty(
            name = "vendor",
            value = "Vendor of the device.",
            required = true
    )
    private String vendor;
    @ApiModelProperty(
            name = "osVersion",
            value = "Operating system version.",
            required = true
    )
    private String osVersion;
    @ApiModelProperty(
            name = "batteryLevel",
            value = "Battery level of the device.",
            required = true
    )
    private Double batteryLevel;
    @ApiModelProperty(
            name = "internalTotalMemory",
            value = "Total internal memory of the device.",
            required = true
    )
    private Double internalTotalMemory;
    @ApiModelProperty(
            name = "internalAvailableMemory",
            value = "Total available memory of the device.",
            required = true
    )
    private Double internalAvailableMemory;
    @ApiModelProperty(
            name = "externalTotalMemory",
            value = "Total external memory of the device.",
            required = true
    )
    private Double externalTotalMemory;
    @ApiModelProperty(
            name = "externalAvailableMemory",
            value = "Total external memory avilable of the device.",
            required = true
    )
    private Double externalAvailableMemory;
    @ApiModelProperty(
            name = "operator",
            value = "Mobile operator of the device.",
            required = true
    )
    private String operator;
    @ApiModelProperty(
            name = "connectionType",
            value = "How the device is connected to the network.",
            required = true
    )
    private String connectionType;
    @ApiModelProperty(
            name = "mobileSignalStrength",
            value = "Current mobile signal strength.",
            required = true
    )
    private Double mobileSignalStrength;
    @ApiModelProperty(
            name = "ssid",
            value = "ssid of the connected WiFi.",
            required = true
    )
    private String ssid;
    @ApiModelProperty(
            name = "cpuUsage",
            value = "Current total cpu usage.",
            required = true
    )
    private Double cpuUsage;
    @ApiModelProperty(
            name = "totalRAMMemory",
            value = "Total Ram memory size.",
            required = true
    )
    private Double totalRAMMemory;
    @ApiModelProperty(
            name = "availableRAMMemory",
            value = "Available total memory of RAM.",
            required = true
    )
    private Double availableRAMMemory;
    @ApiModelProperty(
            name = "pluggedIn",
            value = "Whether the device is plugged into power or not.",
            required = true
    )
    private boolean pluggedIn;
    @ApiModelProperty(
            name = "updatedTime",
            value = "Device updated time.",
            required = true
    )
    private Date updatedTime;
    @ApiModelProperty(
            name = "location",
            value = "Last updated location of the device",
            required = false
    )
    private DeviceLocation location;
    @ApiModelProperty(
            name = "deviceDetailsMap",
            value = ".",
            required = true
    )
    private Map<String, String> deviceDetailsMap = new HashMap();

    public AndroidDeviceInfo() {
    }

    public DeviceLocation getLocation() {
        return this.location;
    }

    public void setLocation(DeviceLocation location) {
        this.location = location;
    }

    public String getIMEI() {
        return this.IMEI != null?this.IMEI:"";
    }

    public void setIMEI(String IMEI) {
        this.IMEI = IMEI;
    }

    public String getIMSI() {
        return this.IMSI != null?this.IMSI:"";
    }

    public void setIMSI(String IMSI) {
        this.IMSI = IMSI;
    }

    public String getDeviceModel() {
        return this.deviceModel != null?this.deviceModel:"";
    }

    public void setDeviceModel(String deviceModel) {
        this.deviceModel = deviceModel;
    }

    public String getVendor() {
        return this.vendor != null?this.vendor:"";
    }

    public void setVendor(String vendor) {
        this.vendor = vendor;
    }

    public String getOsVersion() {
        return this.osVersion != null?this.osVersion:"";
    }

    public void setOsVersion(String osVersion) {
        this.osVersion = osVersion;
    }

    public Double getBatteryLevel() {
        return this.batteryLevel != null?this.batteryLevel:Double.valueOf(0.0D);
    }

    public void setBatteryLevel(Double batteryLevel) {
        this.batteryLevel = batteryLevel;
    }

    public Double getInternalTotalMemory() {
        return this.internalTotalMemory != null?this.internalTotalMemory:Double.valueOf(0.0D);
    }

    public void setInternalTotalMemory(Double internalTotalMemory) {
        this.internalTotalMemory = internalTotalMemory;
    }

    public Double getInternalAvailableMemory() {
        return this.internalAvailableMemory != null?this.internalAvailableMemory:Double.valueOf(0.0D);
    }

    public void setInternalAvailableMemory(Double internalAvailableMemory) {
        this.internalAvailableMemory = internalAvailableMemory;
    }

    public Double getExternalTotalMemory() {
        return this.externalTotalMemory != null?this.externalTotalMemory:Double.valueOf(0.0D);
    }

    public void setExternalTotalMemory(Double externalTotalMemory) {
        this.externalTotalMemory = externalTotalMemory;
    }

    public Double getExternalAvailableMemory() {
        return this.externalAvailableMemory != null?this.externalAvailableMemory:Double.valueOf(0.0D);
    }

    public void setExternalAvailableMemory(Double externalAvailableMemory) {
        this.externalAvailableMemory = externalAvailableMemory;
    }

    public String getOperator() {
        return this.operator != null?this.operator:"";
    }

    public void setOperator(String operator) {
        this.operator = operator;
    }

    public String getConnectionType() {
        return this.connectionType != null?this.connectionType:"";
    }

    public void setConnectionType(String connectionType) {
        this.connectionType = connectionType;
    }

    public Double getMobileSignalStrength() {
        return this.mobileSignalStrength != null?this.mobileSignalStrength:Double.valueOf(0.0D);
    }

    public void setMobileSignalStrength(Double mobileSignalStrength) {
        this.mobileSignalStrength = mobileSignalStrength;
    }

    public String getSsid() {
        return this.ssid != null?this.ssid:"";
    }

    public void setSsid(String ssid) {
        this.ssid = ssid;
    }

    public Double getCpuUsage() {
        return this.cpuUsage != null?this.cpuUsage:Double.valueOf(0.0D);
    }

    public void setCpuUsage(Double cpuUsage) {
        this.cpuUsage = cpuUsage;
    }

    public Double getTotalRAMMemory() {
        return this.totalRAMMemory != null?this.totalRAMMemory:Double.valueOf(0.0D);
    }

    public void setTotalRAMMemory(Double totalRAMMemory) {
        this.totalRAMMemory = totalRAMMemory;
    }

    public Double getAvailableRAMMemory() {
        return this.availableRAMMemory != null?this.availableRAMMemory:Double.valueOf(0.0D);
    }

    public void setAvailableRAMMemory(Double availableRAMMemory) {
        this.availableRAMMemory = availableRAMMemory;
    }

    public boolean isPluggedIn() {
        return this.pluggedIn;
    }

    public void setPluggedIn(boolean pluggedIn) {
        this.pluggedIn = pluggedIn;
    }

    public Date getUpdatedTime() {
        if(this.updatedTime == null) {
            this.updatedTime = new Date();
        }

        return this.updatedTime;
    }

    public void setUpdatedTime(Date updatedTime) {
        this.updatedTime = updatedTime;
    }

    public void setDeviceDetailsMap(Map<String, String> deviceDetailsMap) {
        this.deviceDetailsMap = deviceDetailsMap;
    }

    public Map<String, String> getDeviceDetailsMap() {
        return this.deviceDetailsMap;
    }
}
