package scripts.scheduler.example;


import com.trackstudio.app.csv.CSVImport;
import com.trackstudio.app.session.SessionContext;
import com.trackstudio.app.session.SessionManager;
import com.trackstudio.external.ICategoryScheduler;
import com.trackstudio.kernel.cache.TaskRelatedInfo;
import com.trackstudio.kernel.cache.UserRelatedInfo;
import com.trackstudio.kernel.cache.UserRelatedManager;
import com.trackstudio.kernel.lock.LockManager;
import com.trackstudio.secured.SecuredMessageTriggerBean;
import com.trackstudio.secured.SecuredTaskBean;

import java.util.ArrayList;
import java.util.Calendar;

public class Escalate implements ICategoryScheduler{

    @Override
    public String getCategoryId() {
        return "4028808a1951e21b01195245ff4200c1";
    }

    @Override
    public String getCronTime() {
        return "0 0 22 * * ?";
    }

    @Override
    public String getName() {
        return "escalate";
    }



    public void execute(TaskRelatedInfo task) {

        final LockManager lockManager = LockManager.getInstance();
        boolean r = lockManager.acquireConnection();
        try {

            String botId = "8a80828f4c08f430014c0929609f006a";     /* id бота*/
            UserRelatedInfo bot = UserRelatedManager.getInstance().find(botId);
            Calendar deadline = task.getDeadline();
            Calendar now = Calendar.getInstance();
            ArrayList<String> statuslist = new ArrayList<String>();  /*список состояний задачи*/
            String sessionId = SessionManager.getInstance().create(bot);

            SessionContext sc = SessionManager.getInstance().getSessionContext(sessionId);
            SecuredTaskBean tsk = new SecuredTaskBean(task, sc);
            String status = tsk.getStatus().getName();
            String mstatusId = CSVImport.findMessageTypeIdByName("escalate", tsk.getCategory().getName());

            statuslist.add("В процессе");
            statuslist.add("Новая");
            statuslist.add("Приостановлена");

            if (deadline!=null && statuslist.contains(status) && deadline.getTimeInMillis() < now.getTimeInMillis()) {
                SecuredMessageTriggerBean message = new SecuredMessageTriggerBean(
                        null /* индентификатор */,
                        "задача была просрочена" /* текст комментария */,
                        Calendar.getInstance() /* время выполнения операции */,
                        null /* потраченное время */,
                        tsk.getDeadline() /* Сроки выполнения задачи (deadline) */,
                        tsk.getBudget() /* бюджет */,
                        tsk.getId() /* задача */,
                        sc.getUserId() /* автор операции */,
                        null /* резолюция */,
                        tsk.getPriorityId() /* приоритет */,
                        tsk.getHandlerId() /* ответственные */,
                        tsk.getHandlerUserId() /* ответственный */,
                        tsk.getHandlerGroupId() /* ответственный, если нужно задать группу в качестве ответственного */,
                        mstatusId /* тип операции */,
                        null /* Map с дополнительными полями */,
                        sc /* SessionContext */,
                        null /* вложения */);
                message.create(true);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            if(r) lockManager.releaseConnection();
        }
    }
}
