<?php

namespace OfficeBrain\CustomBundle\CmsBundle\Manager\Extended;

use OfficeBrain\CustomBundle\CmsBundle\Manager\AbstractManager\UploadArtworkCenterAbstract as UploadArtworkCenterAbstract;
use OfficeBrain\CustomBundle\CmsBundle\Entity\UploadArtworkCenter;
use OfficeBrain\CustomBundle\CmsBundle\Form\UploadArtworkCenterType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;

class UploadArtworkCenterExtended extends UploadArtworkCenterAbstract
{
    public function __construct($serviceContainer)
    {
        parent::__construct($serviceContainer);
    }

    public function __destruct()
    {
        parent::__destruct();
    }

    /**
     * @author Employee Id: 5460
     *
     * Description : This function is used to get list of all upload artwork center
     *
     * @param : $file object
     *
     * @return boolean
     *
     * @throws Exception : Null
     *
     **/
	public function getCmsUploadArtworkCenterList()
	{
    	$data = array();
    
    	//$cmsUploadArtworkCenterList = $this->uploadArtworkCenterRepo->findAll();
    	$cmsUploadArtworkCenterList = $this->uploadArtworkCenterRepo->getArtWorkList();
    	
    	if (count($cmsUploadArtworkCenterList) > 0) {
    		$data['pagination'] = $this->paginatorManager->paginate($cmsUploadArtworkCenterList, $this->request->get('page'), $this->recordsPerPage, array(), count($cmsUploadArtworkCenterList));
    	}
    
    	$data['records_per_page'] = $this->recordsPerPage;
    	$data['page'] = $this->request->get('page');
    
    	return $data;
	}

    /**
     * @author Employee Id: 5460
     *
     * Description : This function is used to get list of all upload artwork center after searching
     *
     * @param : $file object
     *
     * @return boolean
     *
     * @throws Exception : Null
     *
     **/
	public function searchCmsUploadArtworkCenter()
	{
		$data = array();
		$option = $this->request->get('option');
		$keyword = $this->request->get('keyword');
	
		$cmsUploadArtworkCenterList = $this->uploadArtworkCenterRepo->findByOption($option, $keyword);
	
		if (count($cmsUploadArtworkCenterList) > 0) {
			$data['pagination'] = $this->paginatorManager->paginate($cmsUploadArtworkCenterList, $this->request->get('page'), $this->recordsPerPage, array(), count($cmsUploadArtworkCenterList));
		}
	
		$data['records_per_page'] = $this->recordsPerPage;
		$data['page'] = $this->request->get('page');
	
		return $data;
	}
	
	

    /**
     * @author Employee Id: 5460
     *
     * Description : This function is used to get detali of upload artwork center using id
     *
     * @param : $file object
     *
     * @return boolean
     *
     * @throws Exception : Null
     *
     **/
	public function getCmsUploadArtworkCenterDetail($id)
	{
		$data = array();
		
		$cmsUploadArtworkCenterDetail = $this->uploadArtworkCenterRepo->findById($id);
		
		$data['data'] = $cmsUploadArtworkCenterDetail;
		
		return $data;
	}
	
	

    /**
     * @author Employee Id: 5460
     *
     * Description : This function is used to get detail of upload artwork center using id
     *
     * @param : $file object
     *
     * @return boolean
     *
     * @throws Exception : Null
     *
     **/
	public function getCmsUploadArtworkCenterFile($id)
	{
		$data = array();
		
		$uploadArtworkCenterEntity = $this->uploadArtworkCenterRepo->findById($id);
		
		$artworkFiles = $uploadArtworkCenterEntity[0]->getUploadedFile();
		$poNumber = $uploadArtworkCenterEntity[0]->getPoNumber();
		if(count($artworkFiles) == 1)
		{
			// if this artwork has only one document then we will give that file to user in its original format
			$data['file_content'] = file_get_contents($this->uploadArtworkCenterFilePath."/".$artworkFiles[0]);
			$data['file_url'] = $this->uploadArtworkCenterFilePath."/".$artworkFiles[0];
			//$data['file_name'] = $cmsUploadArtworkCenterDetail[0]->getUploadedFile();
			$data['file_name'] = $artworkFiles[0];
			$data['artwork_files'] = count($artworkFiles);
			$data['mime_type'] = mime_content_type($this->uploadArtworkCenterFilePath."/".$artworkFiles[0]);
		}
		else 
		{
			// if this artwork has only multiple documents then we will give that file to user by making zip file
			$zipName = 'Documents-'.$id."-".$poNumber.".zip";
			if(!(file_exists($this->uploadArtworkCenterFilePath."/".$zipName)))
			{
				$zip = new \ZipArchive();
				$zip->open($this->uploadArtworkCenterFilePath."/".$zipName,  \ZipArchive::CREATE);
				foreach($artworkFiles as $artworkFile)
				{
						$zip->addFromString(basename($artworkFile),  file_get_contents($this->uploadArtworkCenterFilePath."/".$artworkFile));
				}
				$zip->close();
			}
			
			$data['file_url'] = $this->uploadArtworkCenterFileUrl."/".$zipName;
			//$data['file_name'] = $cmsUploadArtworkCenterDetail[0]->getUploadedFile();
			$data['file_name'] = $zipName;
			$data['artwork_files'] = count($artworkFiles);
			$data['mime_type'] = mime_content_type($this->uploadArtworkCenterFilePath."/".$artworkFiles[0]);
			//$attachment[] = $this->uploadArtworkCenterFilePath."/".$artworkFile;		
		}		
		
		return $data;
	}
	
	
	
	public function uploadArtworkFile(Request $request)
	{
		$uploadArtworkCenterEntity = new UploadArtworkCenter();
		$uploadArtworkCenterForm = $this->serviceContainer->get('form.factory')->create(new UploadArtworkCenterType(), $uploadArtworkCenterEntity);
		 
		$uploadArtworkCenterForm->handleRequest($request);
		if ($uploadArtworkCenterForm->isSubmitted() && $uploadArtworkCenterForm->isValid())
		{
			$emailTo = $uploadArtworkCenterForm->get('senderEmailAddress')->getData();
			foreach($_FILES as $fIndex => $file)
			{
				if(isset($_FILES[$fIndex]['name']))
				{
					$_FILES[$fIndex]['name'] = str_replace(' ','-',$_FILES[$fIndex]['name']);
				}
			}
			
			foreach($_FILES as $file)
			{
				if (isset($file) && !empty($file))
				{
					if(isset($file['name']) && $file['name'] != "")
					{
						$file['name'] = preg_replace('/[^A-Za-z0-9.\-]/', '', $file['name']);
					}
					$this->responseArray = $this->cmsMediaLibraryManager->uploadMediaFile($_FILES);
					if (isset($this->responseArray[0]['error'])) {
						$errorMessage = '';
						if ($this->responseArray[0]['error'] == 'MEDIA_FILE_TYPE_NOT_ALLOWED') {
							$errorMessage = $this->serviceContainer->get('translator')->trans('cms.media_library.upload.file_upload_error.file_type');
						}
						 
						if ($this->responseArray[0]['error'] == 'MEDIA_FILE_TOO_LARGE') {
							$errorMessage = $this->serviceContainer->get('translator')->trans('cms.media_library.upload.file_upload_error.file_size');
						}
						 
						return new JsonResponse(array('status' => 'error', 'error_message' => $errorMessage));
					}
					else
					{
						// save this data into artwork entity
						if(isset($this->responseArray) && isset($this->responseArray) && $this->responseArray != "")
						{
							$this->responseArray = array_unique($this->responseArray);
							$uploadArtworkCenterEntity->setUploadedFile($this->responseArray);
			
							foreach($this->responseArray as $responseArray)
							{
								// copy this file in artwork{
								$originalImageName = $responseArray;						
								
								$imageUpload=$this->imageLibraryManager->copyMedia($this->mediaFilePath, $this->uploadArtworkCenterFilePath ,$originalImageName,$originalImageName);
								if($imageUpload == '')
								{
									return new JsonResponse(array('status' => 'error', 'error_message' => $this->serviceContainer->get('translator')->trans('cms.media_library.upload.file_upload_error.artwork_file_copy_error')));
								}
								// }copy this file in artwork
							}
			
						}
						
						$this->uploadArtworkCenterRepo->insertUploadArtworkCenter($uploadArtworkCenterEntity);
	        			//$sendEmailToCustomerResponse = $this->senduploadArtworkCenterEmailAutoReply($uploadArtworkCenterEntity);
	        			$sendEmailToAdminResponse = $this->senduploadArtworkCenterEmail($uploadArtworkCenterEntity);
							
						return new JsonResponse(array('status' => 'success', 'success_message' => $this->serviceContainer->get('translator')->trans('cms.media_library.upload.file_upload_success'),'page_url'=> $this->serviceContainer->get('router')->generate('office_brain_page_artwork_confirmation')));
			
					}
				}
				else
				{
					return new JsonResponse(array('status' => 'error', 'error_message' => $this->serviceContainer->get('translator')->trans('cms.media_library.upload.file_upload_error.form_doesnt_have_uploaded_file')));
				}
			}
		}
		else
		{
			return new JsonResponse (  $this->commonLibraryManager->prepareFormJsonError($uploadArtworkCenterForm) );
			//return new JsonResponse(array('status' => 'error', 'error_message' => $this->serviceContainer->get('translator')->trans('cms.media_library.upload.file_upload_error.form_not_submitted_or_form_not_valid')));
		}
	}
	
	public function senduploadArtworkCenterEmail($uploadArtworkCenterEntity)
    {
    	$eventKey = 'transaction_upload_artwork_center';
    	$languageId = $this->languageId;
    	$user = $this->projectUserSetting['user_data'];

    	$params = array(
    			'poNumber' => $uploadArtworkCenterEntity->getPoNumber(),
    			'senderFirstName' => $uploadArtworkCenterEntity->getSenderFirstName(),
//     			'senderLastName' => $uploadArtworkCenterEntity->getSenderLastName(),
    			'senderEmailAddress' => $uploadArtworkCenterEntity->getSenderEmailAddress(),
    			// 'companyName' => $uploadArtworkCenterEntity->getCompanyName(),
    			'message' => $uploadArtworkCenterEntity->getMessage(),
    			'uploadedFile' => $uploadArtworkCenterEntity->getUploadedFile()[0]
    	);
    	
    	$from = $attachment = "";
//     	$from =  $uploadArtworkCenterEntity->getSenderEmailAddress();
//     	$to = $this->serviceContainer->getParameter('artwork_to_address');
    	$to = $uploadArtworkCenterEntity->getSenderEmailAddress();
    	$subject = $this->serviceContainer->get('translator')->trans('cms.front.upload_artwork_center.mail_subject').$uploadArtworkCenterEntity->getPoNumber();
    	
//     	$attachment = array();
//     	$artworkFiles = $uploadArtworkCenterEntity->getUploadedFile();
//     	$artworkFiles = array_unique($artworkFiles);
//     	foreach($artworkFiles as $artworkFile)
//     	{
//     		$attachment[] = $this->uploadArtworkCenterFilePath."/".$artworkFile;
//     	}
    	
    	$cc = ''; // array();
    	$bcc = ''; // array();
    	 
    	$this->emailService->sendMail($eventKey, $to, $params, $languageId, $from, $subject, $attachment, $cc, $bcc);
    	 
    	return true;
    }
    


    public function senduploadArtworkCenterEmailAutoReply($uploadArtworkCenterEntity)
    {
    	$eventKey = 'transaction_upload_artwork_center_auto_reply';
    	$languageId = $this->languageId;
    	$params = array(
    			'poNumber' => $uploadArtworkCenterEntity->getPoNumber(),
    	);
    	 
//     	$from =  $this->serviceContainer->getParameter('artwork_to_address');
    	$from =  "";
    	$to = $uploadArtworkCenterEntity->getSenderEmailAddress();
    	$subject = $this->serviceContainer->get('translator')->trans('cms.front.upload_artwork_center.auto_reply_mail_subject').$uploadArtworkCenterEntity->getPoNumber();
    	 
    	$cc = ''; // array();
    	$bcc = ''; // array();
    	$attachment = array();
    
    	$this->emailService->sendMail($eventKey, $to, $params, $languageId, $from, $subject, $attachment, $cc, $bcc);
    
    	return true;
    }
    


    /**
     * @author Employee Id: 5460
     * Description : This Function is Use For Removing Uploaded Artwork
     * @param integer $uploadedArtworkId
     */
    public function delete($uploadedArtworkId){
    	
    	$uploadedArtwork = $this->uploadArtworkCenterRepo->findOneById($uploadedArtworkId);
    	
    	if(isset($uploadedArtwork) && gettype($uploadedArtwork) == 'object' && $uploadedArtwork != '')
    	{
	    	$this->uploadArtworkCenterRepo->deleteUploadArtworkCenter($uploadedArtwork);
	    	return array('status'=>'success','message'=>$this->serviceContainer->get('translator')->trans('cms.admin.list.upload_artwork_center.delete.success'));
    	}
    	else 
    	{
    		return array('status'=>'error', 'message'=>$this->serviceContainer->get('translator')->trans('cms.admin.list.upload_artwork_center.delete.failure'));
    	}
    }
}