/*
* 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 org.apache.ofbiz.scrum

import org.apache.ofbiz.entity.condition.EntityCondition
import org.apache.ofbiz.entity.condition.EntityOperator

taskStatusId = null
reopenedStatusId = null
backlogStatusId = parameters.backlogStatusId
paraBacklogStatusId = backlogStatusId
currentStatus = sprintStatus.currentStatusId

if ("SPRINT_CLOSED".equals(currentStatus)) {
    backlogStatusId = null
} else {
    if ("Any" == backlogStatusId) {
        backlogStatusId = null
    } else {
        backlogStatusId = "CRQ_REVIEWED"
        reopenedStatusId = "CRQ_REOPENED"
        taskStatusId = "STS_CREATED"
    }
}
orCurentExprs = []
    if (taskStatusId) {
        orCurentExprs.add(EntityCondition.makeCondition("taskCurrentStatusId", EntityOperator.EQUALS, taskStatusId))
        orCurentExprs.add(EntityCondition.makeCondition("taskCurrentStatusId", EntityOperator.EQUALS, "SPRINT_ACTIVE"))
    }
orBacklogExprs = []
    if (backlogStatusId) {
        orBacklogExprs.add(EntityCondition.makeCondition("backlogStatusId", EntityOperator.EQUALS, backlogStatusId))
    }
    if (reopenedStatusId) {
        orBacklogExprs.add(EntityCondition.makeCondition("backlogStatusId", EntityOperator.EQUALS, reopenedStatusId))
    }
andExprs =  []
    if (parameters.projectId) {
        andExprs.add(EntityCondition.makeCondition("projectId", EntityOperator.EQUALS, parameters.projectId))
    } else {
        andExprs.add(EntityCondition.makeCondition("projectId", EntityOperator.EQUALS, sprintStatus.workEffortParentId))
    }
    if (orBacklogExprs) {
        andExprs.add(EntityCondition.makeCondition(orBacklogExprs, EntityOperator.OR))
    }
    if (orCurentExprs) {
        andExprs.add(EntityCondition.makeCondition(orCurentExprs, EntityOperator.OR))
    }
    andExprs.add(EntityCondition.makeCondition("sprintId", EntityOperator.EQUALS, parameters.sprintId))
    andExprs.add(EntityCondition.makeCondition("sprintTypeId", EntityOperator.EQUALS, "SCRUM_SPRINT"))
    
projectSprintCond = EntityCondition.makeCondition(andExprs, EntityOperator.AND)
projectSprintList = from("ProjectSprintBacklogAndTask").where(andExprs).orderBy("custSequenceNum","custRequestId","taskTypeId").queryList()

context.listIt = projectSprintList
context.paraBacklogStatusId = paraBacklogStatusId

//get backlog and task information
if (parameters.sprintId) {
    //get total backlog size
    completedBacklog = 0
    reviewedBacklog = 0
    totalbacklog = 0
    allTask = []
    sprintList = from("CustRequestWorkEffort").where("workEffortId", parameters.sprintId).queryList()
    sprintList.each { sprintMap ->
        custMap = sprintMap.getRelatedOne("CustRequest", false)
        //if ("RF_PROD_BACKLOG".equals(custMap.custRequestTypeId)) {
            totalbacklog += 1
            if ("CRQ_REVIEWED".equals(custMap.statusId)){
                reviewedBacklog += 1
            } else {
                completedBacklog += 1
            }
            //get task
            workEffortList = custMap.getRelated("CustRequestWorkEffort", null, null, false)
            if (workEffortList) {
                allTask.addAll(workEffortList)
            }
        //}
    }
    //get total task size
    completedTask = 0
    createdTask = 0
    totalTask = 0
    if (allTask) {
        allTask.each { taskMap ->
            workEffMap = taskMap.getRelatedOne("WorkEffort", false)
            if (!"SCRUM_SPRINT".equals(workEffMap.workEffortTypeId)) {
                totalTask += 1
                if ("STS_CREATED".equals(workEffMap.currentStatusId)){
                    createdTask += 1
                } else {
                    completedTask += 1
                }
            }
        }
    }
    context.completedBacklog = completedBacklog
    context.reviewedBacklog = reviewedBacklog
    context.totalbacklog = totalbacklog
    context.completedTask = completedTask
    context.createdTask = createdTask
    context.totalTask = totalTask
}
