package com.sun.identity.saml2.profile;

import com.sun.identity.plugin.session.SessionException;
import com.sun.identity.plugin.session.SessionManager;
import com.sun.identity.plugin.session.SessionProvider;
import com.sun.identity.saml2.common.SAML2Utils;
import java.util.ArrayList;
import java.util.List;

public class IDPSession {
   private Object session;
   private final List<NameIDandSPpair> nameIDandSPpairs;
   private String pendingLogoutRequestID;
   private String originatingLogoutRequestID;
   private String originatingLogoutSPEntityID;
   private String metaAlias;

   public IDPSession(Object session) {
      this.session = session;
      this.nameIDandSPpairs = new ArrayList<>();
   }

   public IDPSession(Object session, List<NameIDandSPpair> nameIDandSPpairs) {
      this.session = session;
      this.nameIDandSPpairs = nameIDandSPpairs;
   }

   public Object getSession() {
      return this.session;
   }

   public List<NameIDandSPpair> getNameIDandSPpairs() {
      return this.nameIDandSPpairs;
   }

   public void setPendingLogoutRequestID(String id) {
      this.pendingLogoutRequestID = id;
   }

   public String getPendingLogoutRequestID() {
      return this.pendingLogoutRequestID;
   }

   public void setOriginatingLogoutRequestID(String id) {
      this.originatingLogoutRequestID = id;
   }

   public String getOriginatingLogoutRequestID() {
      return this.originatingLogoutRequestID;
   }

   public void setOriginatingLogoutSPEntityID(String id) {
      this.originatingLogoutSPEntityID = id;
   }

   public String getOriginatingLogoutSPEntityID() {
      return this.originatingLogoutSPEntityID;
   }

   public IDPSession(IDPSessionCopy idpSessionCopy) {
      this.nameIDandSPpairs = new ArrayList<>();

      try {
         SessionProvider sessionProvider = SessionManager.getProvider();
         this.session = sessionProvider.getSession(idpSessionCopy.getSSOToken());
         this.nameIDandSPpairs.addAll(idpSessionCopy.getNameIDandSPpairs());
         String tmp = idpSessionCopy.getPendingLogoutRequestID();
         if (tmp != null && !tmp.isEmpty()) {
            this.pendingLogoutRequestID = tmp;
         }

         tmp = idpSessionCopy.getOriginatingLogoutRequestID();
         if (tmp != null && !tmp.isEmpty()) {
            this.originatingLogoutRequestID = tmp;
         }

         tmp = idpSessionCopy.getOriginatingLogoutSPEntityID();
         if (tmp != null && !tmp.isEmpty()) {
            this.originatingLogoutSPEntityID = tmp;
         }

         this.metaAlias = idpSessionCopy.getMetaAlias();
      } catch (SessionException se) {
         SAML2Utils.DEBUG.error("Session Exception.", se);
      }
   }

   public void setMetaAlias(String metaAlias) {
      this.metaAlias = metaAlias;
   }

   public String getMetaAlias() {
      return this.metaAlias;
   }
}
