// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF 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 com.cloud.network;

import java.util.Date;
import java.util.UUID;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

import com.cloud.utils.db.GenericDao;

@Entity
@Table(name=("user_ipv6_address"))
public class UserIpv6AddressVO implements UserIpv6Address {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    long id;

	@Column(name="ip_address")
	@Enumerated(value=EnumType.STRING)
	private String address = null;

	@Column(name="data_center_id", updatable=false)
	private long dataCenterId;

	@Column(name="vlan_id")
	private long vlanId;

	@Column(name="state")
	private State state;

	@Column(name="mac_address")
	private String macAddress;

	@Column(name="source_network_id")
    private Long sourceNetworkId;

	@Column(name="network_id")
	private Long networkId;

	@Column(name="uuid")
	private String uuid;

    @Column(name="physical_network_id")
    private Long physicalNetworkId;

	@Column(name="account_id")
	private Long accountId = null;

    @Column(name="domain_id")
    private Long domainId = null;
	
    @Column(name = GenericDao.CREATED_COLUMN)
    Date created;
	
	protected UserIpv6AddressVO() {
		this.uuid = UUID.randomUUID().toString();
	}

	public UserIpv6AddressVO(String address, long dataCenterId, String macAddress, long vlanDbId) {
		this.address = address;
		this.dataCenterId = dataCenterId;
		this.vlanId = vlanDbId;
		this.state = State.Free;
		this.setMacAddress(macAddress);
		this.uuid = UUID.randomUUID().toString();
	}


	@Override
	public long getAccountId() {
		return accountId;
	}

	@Override
	public long getDomainId() {
		return domainId;
	}

	@Override
	public String getUuid() {
		return uuid;
	}

	@Override
	public long getId() {
		return id;
	}

	@Override
	public long getDataCenterId() {
		return dataCenterId;
	}

	@Override
	public String getAddress() {
		return address;
	}

	@Override
	public long getVlanId() {
		return vlanId;
	}

	@Override
	public State getState() {
		return state;
	}

	@Override
	public Long getNetworkId() {
		return networkId;
	}

	@Override
	public Long getSourceNetworkId() {
		return sourceNetworkId;
	}

	@Override
	public Long getPhysicalNetworkId() {
		return physicalNetworkId;
	}

	@Override
	public void setState(State state) {
		this.state = state;
	}

	public String getMacAddress() {
		return macAddress;
	}

	public void setMacAddress(String macAddress) {
		this.macAddress = macAddress;
	}

	public void setSourceNetworkId(Long sourceNetworkId) {
		this.sourceNetworkId = sourceNetworkId;
	}

	public void setNetworkId(Long networkId) {
		this.networkId = networkId;
	}

	public void setPhysicalNetworkId(Long physicalNetworkId) {
		this.physicalNetworkId = physicalNetworkId;
	}

	public void setDomainId(Long domainId) {
		this.domainId = domainId;
	}

	public void setAccountId(Long accountId) {
		this.accountId = accountId;
	}

	public Date getCreated() {
		return created;
	}

	public void setCreated(Date created) {
		this.created = created;
	}
}
