/*
 * 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.
 */

import java.util.ArrayList
import java.util.Collection
import java.util.HashMap
import java.util.Iterator
import java.util.LinkedList
import java.util.List
import java.util.Map
import java.util.Set
import java.util.TreeSet

import org.apache.ofbiz.base.util.*
import org.apache.ofbiz.entity.*
import org.apache.ofbiz.security.*
import org.apache.ofbiz.service.*
import org.apache.ofbiz.entity.model.*
import org.apache.ofbiz.content.content.PermissionRecorder

import javax.servlet.*
import javax.servlet.http.*

paramMap = UtilHttp.getParameterMap(request)

contentIdTo = paramMap.contentIdTo
if (!contentIdTo) {
    request.setAttribute("errorMsgReq", "contentIdTo is empty")
    return
}

/*
pubPt = paramMap.pubPt ?: context.pubPt
if (!pubPt) {
    request.setAttribute("errorMsgReq", "pubPt is empty")
    return
}
*/

contentToValue = from("Content").where("contentId", contentIdTo).queryOne()
contentToPurposeList = contentToValue.getRelated("ContentPurpose", null, null, true)
currentValue = delegator.makeValue("Content", [contentTypeId : "DOCUMENT", statusId : "CTNT_PUBLISHED", privilegeEnumId : "_00_"])

if (contentToPurposeList.contains("RESPONSE")) {
    ownerContentId = contentToValue.ownerContentId
    currentValue.ownerContentId = ownerContentId
} else {
    contentId = contentToValue.contentId
    currentValueownerContentId = contentId
}

mapIn = [:]
mapIn.userLogin = userLogin
targetOperationList = StringUtil.split(context.targetOperation, "|")
mapIn.targetOperationList = targetOperationList

if (currentValue) {
    mapIn.currentContent = currentValue
}
mapIn.entityOperation = "_CREATE"
mapIn.contentPurposeList = ["RESPONSE"]

//org.apache.ofbiz.base.util.Debug.logInfo("in permprep, mapIn:" + mapIn, null)
result = runService('checkContentPermission', mapIn)
permissionStatus = result.permissionStatus
//org.apache.ofbiz.base.util.Debug.logInfo("permissionStatus:" + permissionStatus, null)
if (!"granted".equals(permissionStatus)) {
    request.setAttribute("errorMsgReq", "Permission to add response is denied (1)")
    errorMessage = "Permission to add response is denied (2)"
    recorder = result.permissionRecorder
    //Debug.logInfo("recorder(0):" + recorder, "")
    if (recorder) {
        permissionMessage = recorder.toHtml()
        //Debug.logInfo("permissionMessage(0):" + permissionMessage, "")
        errorMessage += " \n " + permissionMessage
    }
    request.setAttribute("permissionErrorMsg", errorMessage)
    context.permissionErrorMsg = errorMessage
    context.hasPermission = false
    request.setAttribute("hasPermission", false)
    request.setAttribute("permissionStatus", "")
    return
} else {
    context.hasPermission = true
    request.setAttribute("hasPermission", true)
    request.setAttribute("permissionStatus", "granted")
}

/*
pubContentValue = delegator.findOne("Content", [contentId : pubPt], false)
if (pubContentValue) {
    mapIn.currentContent = pubContentValue
    mapIn.statusId = "CTNT_PUBLISHED"
}
//org.apache.ofbiz.base.util.Debug.logInfo("in permprep(2), mapIn:" + mapIn, null)
result = dispatcher.runSync("checkContentPermission", mapIn)
permissionStatus = result.permissionStatus
//org.apache.ofbiz.base.util.Debug.logInfo("permissionStatus(2):" + permissionStatus, null)
if (!"granted".equals(permissionStatus)) {

    request.setAttribute("errorMsgReq", "Permission to add response is denied (2)")
    errorMessage = "Permission to add response is denied (2)"
    recorder = result.permissionRecorder
        //Debug.logInfo("recorder(0):" + recorder, "")
    if (recorder) {
        permissionMessage = recorder.toHtml()
        //Debug.logInfo("permissionMessage(0):" + permissionMessage, "")
        errorMessage += " \n " + permissionMessage
    }
    request.setAttribute("permissionErrorMsg", errorMessage)
    context.permissionErrorMsg = errorMessage
    context.hasPermission = false
    request.setAttribute("hasPermission", false)
    request.setAttribute("permissionStatus", "")
    return
} else {
        context.hasPermission = true
        request.setAttribute("hasPermission", true)
        request.setAttribute("permissionStatus", "granted")
}
*/

request.setAttribute("currentValue", currentValue)
singleWrapper = context.singleWrapper
singleWrapper.putInContext("contentPurposeTypeId", context.contentPurposeTypeId)
singleWrapper.putInContext("targetOperation", context.targetOperation)
singleWrapper.putInContext("targetOperationString", context.targetOperation)
singleWrapper.putInContext("currentValue", currentValue)

trailList = context.trailList
replyName = null
if (trailList) {
    idNamePair = trailList[trailList.size() -1]
    replyName = idNamePair[1]
    if (!replyName.contains("RE:")) {
        replyName = "RE:" + replyName
    }
}
singleWrapper.putInContext("replyName", [contentName : replyName, description : replyName])
