import {Injectable, EventEmitter} from '@angular/core';
import {AppUtility} from '../shared/app.utility';
import {AppConstants} from '../shared/app.constants';
import {Router, ActivatedRoute} from '@angular/router';
import {Project} from '../shared/project.model';
import {projectHeader} from 'metadata-editor-repository';

var _ = require('lodash');
const {dialog} = require('electron').remote;

@Injectable()

/*
* Service for managing the workspace view
*************************************************************/
export class WorkspaceService {
    public projects: EventEmitter < any > = new EventEmitter < any > ();
    public activeProject : any;
    public workspaceRouter: EventEmitter < any > = new EventEmitter < any > ();
    
    constructor(private route : ActivatedRoute, private router : Router) {
        this.router.events.subscribe((currentRoute: any) => {
            this.workspaceRouter.emit(currentRoute);
        });
    }

    /*
    * Open new project based on the type
    ***************************************************************/
    public openProject(templateType : string) {
        projectHeader.addNewStudy(templateType, (response : any) => {
            if (response.result == 'ok') {
                this.activeProject = response.data;
                this.projects.emit({project: this.activeProject})
            } else {
                console.log(response.messages);
            }
        });
    }

    /*
    * Save project into file system
    ***************************************************************/
    public saveProject() {
        let self = this;
        if (!self.activeProject) {
            dialog.showMessageBox({type: 'error', title: 'Project not found', message: 'Open a project before save the project'});
        } else {
            let filePath = dialog.showSaveDialog({
                title: 'Save Project',
                filters: [
                    {
                        name: 'mde',
                        extensions: ['mde']
                    }
                ]
            });

            if (filePath) {
                self.activeProject.header = filePath;
                self.activeProject.name = filePath
                    .replace(/^.*[\\\/]/, '')
                    .split('.')[0];
                self.activeProject.modified = new Date();

                let metadata = {
                    "_id": self.activeProject._id,
                    "docDescr": {
                        "test": "test"
                    },
                    "studyDescr": {
                        "test": "test"
                    },
                    "datasets": {
                        "test": "test"
                    },
                    "extResources": {
                        "test": "test"
                    }
                };

                projectHeader.saveStudy(self.activeProject, metadata, (response : any) => {
                    if (response.result == 'ok') {
                        dialog.showMessageBox({type: 'info', title: 'Success', message: 'Project saved successfully.'});
                    } else {
                        dialog.showMessageBox({type: 'error', title: 'Error', message: response.messages});
                    }
                })
            }
        }
    }

    /*
    * Router navigation method
    ***************************************************************/
    navigateTo(path : string, type : string = '') {
        this.router.navigate([path, type])
    }
}