#!/usr/bin/env python

import os
import copy
from dm.common.utility.loggingManager import LoggingManager
from dm.common.processing.plugins.fileProcessor import FileProcessor
from dm.ds_web_service.api.dsRestApiFactory import DsRestApiFactory

class DsProcessFileNotificationPlugin(FileProcessor):

    def __init__(self, dependsOn=[]):
        FileProcessor.__init__(self, dependsOn=dependsOn)
        self.dsFileApi = DsRestApiFactory.getFileDsApi()
        self.logger = LoggingManager.getInstance().getLogger(self.__class__.__name__)

    def processFile(self, fileInfo):
        experimentFilePath = fileInfo.get('experimentFilePath')
        experimentName = fileInfo.get('experimentName')
        daqInfo = fileInfo.get('daqInfo', {})
        md5Sum = fileInfo.get('md5Sum')
        self.logger.debug('Processing file %s for experiment %s' % (experimentFilePath, experimentName))

        # Prepare dictionary for processing. Only send needed data.
        fileInfo2 = {}
        fileInfo2['experimentFilePath'] = experimentFilePath
        fileInfo2['experimentName'] = experimentName
        if md5Sum:
            fileInfo2['md5Sum'] = md5Sum
        fileInfo2['daqInfo'] = daqInfo
        self.logger.debug('File info sent to DS service: %s' % (str(fileInfo2)))
        self.dsFileApi.processFile(experimentFilePath, experimentName, fileInfo2)

    def processDirectory(self, directoryInfo):
        uploadInfo = directoryInfo.get('uploadInfo')
        experimentName = uploadInfo.get('experimentName')
        experimentDirectoryPath = ''
        daqInfo = directoryInfo.get('daqInfo')

        directoryInfo2 = {}
        directoryInfo['experimentDirectoryPath'] = experimentDirectoryPath
        directoryInfo2['experimentName'] = experimentName
        directoryInfo2['daqInfo'] = daqInfo
        self.logger.debug('Directory info sent to DS service: %s' % (str(directoryInfo2)))
        self.dsFileApi.processDirectory(experimentDirectoryPath, experimentName, directoryInfo2)

#######################################################################
# Testing.
if __name__ == '__main__':
    pass