// Upload de file
const express = require( 'express' );
const path = require( 'path' );
const jsonfile = require( 'jsonfile' );
const fs = require( 'fs' );

// Classes
const UploadFile = require( '../models/UploadFiles' );
// Middlewares
const checkHeaders = require( '../middlewares/checkHeaders' );
const isAuthenticated = require( '../middlewares/isAuthenticated' );
const router = express.Router();

router.post( '/', checkHeaders, ( req, res ) => {
	logger.info( 'route uploadFile post ' );
	const saveFile = UploadFile.add( req, req.session.header );
	res.send( saveFile );
	// res.send({ status: 200, payload: { info: 'fine' } });
} );

router.post( '/json', checkHeaders, ( req, res ) => {
	logger.info( 'route uploadFile post de fichier json ' );
	// a callback can be pass to req.body to run a specific process after upload
	const saveFile = UploadFile.addjson( req.body, req.session.header );
	logger.info( saveFile );
	res.send( saveFile );
	// res.send({ status: 200, payload: { info: 'fine' } });
} );

router.get( '/:filename', checkHeaders, isAuthenticated, ( req, res ) => {
	logger.info( 'route uploadFile get ', req.params.filename );
	const pushFile = UploadFile.get(
		req.params.filename.replace( /______/g, '/' ),
		req.session.header
	);
	if( pushFile.status == 200 ) {
		if( path.extname( pushFile.payload.file ) === '.json' ) {
			jsonfile.readFile( pushFile.payload.file, ( err, p ) => {
				if( err ) console.error( err );
				res.jsonp( p );
			} );
		} else {
			res.download( pushFile.payload.file, path.basename( pushFile.payload.file ) );
		}
	} else {
		res.send( pushFile );
	}
} );
module.exports = router;
