package edu.psu.swe.scim.server.utility;

import java.io.Serializable;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

import lombok.Data;
import edu.psu.swe.scim.spec.annotation.ScimAttribute;
import edu.psu.swe.scim.spec.annotation.ScimExtensionType;
import edu.psu.swe.scim.spec.resources.ScimExtension;
import edu.psu.swe.scim.spec.schema.Schema.Attribute.Mutability;
import edu.psu.swe.scim.spec.schema.Schema.Attribute.Returned;

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
@ScimExtensionType(required = false, name = "ExampleObject", id = ExampleObjectExtension.URN, description = "Example Object Extensions.")
@Data
public class ExampleObjectExtension implements ScimExtension {

  private static final long serialVersionUID = -5398090056271556423L;

  public static final String URN = "urn:ietf:params:scim:schemas:extension:example:2.0:Object";

  @XmlType
  @XmlAccessorType(XmlAccessType.NONE)
  @Data
  public static class ComplexObject implements Serializable {

    private static final long serialVersionUID = 2822581434679824690L;

    @ScimAttribute(description = "The \"id\" of the complex object.")
    @XmlElement
    private String value;

    @ScimAttribute(mutability = Mutability.READ_ONLY, description = "displayName of the object.")
    @XmlElement
    private String displayName;
  }

  @ScimAttribute(returned = Returned.ALWAYS)
  @XmlElement
  private String valueAlways;

  @ScimAttribute(returned = Returned.DEFAULT)
  @XmlElement
  private String valueDefault;

  @ScimAttribute(returned = Returned.NEVER)
  @XmlElement
  private String valueNever;

  @ScimAttribute(returned = Returned.REQUEST)
  @XmlElement
  private String valueRequest;
  
  @ScimAttribute(returned = Returned.REQUEST)
  @XmlElement
  private ComplexObject valueComplex;
  
  @ScimAttribute
  @XmlElement
  private List<String> list;
  
  @ScimAttribute
  @XmlElement
  private Subobject subobject;

  @Override
  public String getUrn() {
    return URN;
  }
}
