/***************************************************************************
 * Copyright (C) 2003-2007 eXo Platform SAS.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Affero General Public License
 * as published by the Free Software Foundation; either version 3
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see<http://www.gnu.org/licenses/>.
 ***************************************************************************/
package org.exoplatform.forum.webui;

import org.exoplatform.commons.utils.CommonsUtils;
import org.exoplatform.forum.ForumUtils;
import org.exoplatform.forum.common.UserHelper;
import org.exoplatform.forum.common.webui.WebUIUtils;
import org.exoplatform.forum.service.ForumService;
import org.exoplatform.forum.service.UserProfile;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.core.UIContainer;

@ComponentConfig(
    template = "app:/templates/forum/webui/UIPostRules.gtmpl"
)
public class UIPostRules extends UIContainer {
  private UserProfile userProfile;

  private boolean     canCreateNewThread = false;

  private boolean     canAddPost         = false;

  public boolean isCanCreateNewThread() {
    return canCreateNewThread;
  }

  public boolean isCanAddPost() {
    return canAddPost;
  }

  public UIPostRules() throws Exception {
  }

  protected UserProfile getUserProfile() throws Exception {
    if (this.userProfile == null) {
      try {
        this.userProfile = this.getAncestorOfType(UIForumPortlet.class).getUserProfile();
      } catch (Exception e) {
        ForumService forumService = CommonsUtils.getService(ForumService.class);
        userProfile = forumService.getDefaultUserProfile(UserHelper.getCurrentUser(), ForumUtils.EMPTY_STR);
      }
    }
    return this.userProfile;
  }

  public void setUserProfile(UserProfile userProfile) {
    this.userProfile = userProfile;
  }

  public void setLock(boolean isLock) {
    canCreateNewThread = !isLock;
    canAddPost = !isLock;
  }

  public void setCanAddPost(boolean canAddPost) {
    this.canAddPost = canAddPost;
  }

  public void setCanCreateNewThread(boolean canCreatThread) {
    this.canCreateNewThread = canCreatThread;
  }
  
  protected String ruleBuilder() throws Exception {
    boolean canCreatThread = true, canPost = true;
    if (getUserProfile().getIsBanned() || getUserProfile().getUserRole() == UserProfile.GUEST) {
      canCreatThread = false;
      canPost = false;
    } else {
      if (isCanCreateNewThread() == false) {
        canCreatThread = false;
      }
      if (isCanAddPost() == false) {
        canPost = false;
      }
    }
    StringBuilder builder = new StringBuilder("<ul>");
    if (canCreatThread) {
      builder.append("<li>").append(getLabel("YouCanCreateTopics")).append("</li>");
    } else {
      builder.append("<li>").append(getLabel("YouCanNotCreateTopics")).append("</li>");
    }
    String[] labels = new String[] { "PostReplies", "PostAttachments", "EditYourPosts" };
    for (int i = 0; i < labels.length; i++) {
      if (canPost) {
        builder.append("<li>").append(getLabel("YouCan" + labels[i])).append("</li>");
      } else {
        builder.append("<li>").append(getLabel("YouCanNot" + labels[i])).append("</li>");
      }
    }
    builder.append("</ul>");
    return builder.toString();
  }

  private String getLabel(String label) {
    return WebUIUtils.getLabel(getId(), label).replace("{0}", "<strong>").replace("{1}", "</strong>");
  }
  
}
