router.all('/edit/:id/get_fields', function (req, res, next) {
    global.preparePageData(req, res, next);
    var id = parseInt(req.params.id);
    var phaseId = parseInt(req.body.phaseId);

    var project = {};
    var phaseFields = [];

    var whereProjArgs = [{col: 'id', val: id}];
    var queryResults = global.dbSelect(global.DB_TABLE_PROJECTS, '*', whereProjArgs);
    if (!isNaN(phaseId) && queryResults.rowCount === 1) {
        project = queryResults.rows[0];
        var projectPhaseData = global.dbSelect(global.DB_TABLE_PROJECTS_PHASE_DATA, '*', [{col: 'project_id', val: id}, {col: 'phase_id', val: phaseId}]).rows;
        phaseFields = tools.getCustomFields(
                global.DB_TABLE_PHASE_FIELDS,
                [{col: 'phase_id', val: phaseId}],
                global.FORM_PREFIX,
                'phase_field_id',
                projectPhaseData,
                null, null,
                'position'
        );
    } else {
        console.log("Didn't find fields /edit/:id/get_fields");
        console.log("id", id);
        console.log("REQUEST", req.body);
    }

    var fields = tools.getNiceObject(phaseFields, 'phase_fields');

    var data = {
        id: id,
        project: tools.getNiceObject(project, 'project'),
        table: global.DB_TABLE_PHASE_FIELDS,
        fields: fields,
        resource: 'project',
        resourceId: id,
        fieldCategory: phaseId,
    };

    //console.log("DATA", data);

    if (false) {
        console.log("---------------------/edit/:id/get_fields----------------------------");
        console.log("id", phaseId);
        console.log("phaseId", phaseId);
        console.log("data", data);
        console.log("---------------------END /edit/:id/get_fields----------------------------");
    }

    res.render('ajax/fields', data);
});
router.all('/add/get_fields', function (req, res, next) {
    global.preparePageData(req, res, next);

    var phaseId = parseInt(req.body.phaseId);

    var phaseFields = [];
    if (!isNaN(phaseId)) {
        phaseFields = tools.getCustomFields(
                global.DB_TABLE_PHASE_FIELDS,
                [{col: 'phase_id', val: phaseId}],
                global.FORM_PREFIX,
                'phase_field_id'
        );
        
        var resourceId = -1;
        
        var data = {
            //id: id,
            //project: tools.getNiceObject(project, 'project'),
            table: global.DB_TABLE_PHASE_FIELDS,
            fields: tools.getNiceObject(phaseFields, 'phase_fields'),
            table: global.DB_TABLE_PHASE_FIELDS,
            resource: 'project',
            resourceId: resourceId,
            fieldCategory: phaseId,
        };

        if (true) {
            console.log("---------------------/add/:id/get_fields----------------------------");
            console.log("id", phaseId);
            console.log("phaseId", phaseId);
            console.log("data", data);
            console.log("---------------------END /add/:id/get_fields----------------------------");
        }

        res.render('ajax/fields', data);
    } else {
        //console.log("Didn't find fields /edit/:id/get_fields");
        //console.log("REQUEST", req.body);
        res.render('ajax/jade', {content: '<p>Must select phase first</p>'});
    }
});
router.all('/edit/:id', function (req, res, next) {
    global.preparePageData(req, res, next);
    var id = parseInt(req.params.id);

    //on select change update current phase id for project
    if (!isNaN(req.body.project_current_phase_id)) {
        var projectCurrentPhaseId = parseInt(req.body.project_current_phase_id);
        global.dbUpdate(global.DB_TABLE_PROJECTS, {current_phase_id: projectCurrentPhaseId}, [{col: 'id', val: id}]);
    }
    //console.log("REQUEST", req.body, "FILES", req.files);
    var msgs = getProjectErrors(req, 'edit');
    var whereProjArgs = [{col: 'id', val: id}];
    var queryResults = global.dbSelect(global.DB_TABLE_PROJECTS, '*', whereProjArgs);
    if (queryResults.rowCount === 1) {
        //found project load data
        var project = queryResults.rows[0];

        if (req.body.submitted && msgs.length === 0) {
            //edit then reload data
            var projectData = {};
            var phaseFieldsData = {};
            Object.keys(req.body).forEach(function (key) {
                if (key.indexOf(global.FORM_PREFIX + 'media') === 0) {
                    //field uploaded media
                } else if (key.indexOf(global.FORM_PREFIX) === 0) {
                    //project phase fields data
                    var k = parseInt(key.replace(global.FORM_PREFIX, ''));
                    phaseFieldsData[k] = req.body[key];
                } else if (key.indexOf(projectPrefix) === 0) {
                    //project data
                    var k = key.replace(projectPrefix, '');
                    switch (k) {
                        case "manager_id":
                        case "current_phase_id":
                            projectData[k] = parseInt(req.body[key]);
                            break;
                        default:
                            projectData[k] = req.body[key];
                            break;
                    }
                }
            });

            //update project data
            global.dbUpdateRow(global.DB_TABLE_PROJECTS, projectData, whereProjArgs);
            //refresh project
            var project = global.dbSelect(global.DB_TABLE_PROJECTS, '*', whereProjArgs).rows[0];
            
            //update phase fields data
            Object.keys(phaseFieldsData).forEach(function (key) {
                var phaseFieldId = key;
                var value = phaseFieldsData[key];
                var data = {
                    project_id: id,
                    phase_id: project.current_phase_id,
                    phase_field_id: phaseFieldId,
                    value: value,
                };
                var whereArgs = [{col: 'project_id', val: id}, {col: 'phase_field_id', val: phaseFieldId}];
                global.dbUpdateRow(global.DB_TABLE_PROJECTS_PHASE_DATA, data, whereArgs);
            });

            //update project media
            var i = 0;
            for (var key in req.files) {
                var media = req.files[key];
                if( media.filename.length === 0 ) {
                    //error
                } else if (key.indexOf(global.FORM_PREFIX) !== -1) {
                    var phaseFieldId = parseInt(key.replace(global.FORM_PREFIX, ''));
                    var fileId = file.uploadFile(req.session.uid, 'project', project.id, null, media);
                    var data = {
                        project_id: id,
                        phase_id: project.current_phase_id,
                        phase_field_id: phaseFieldId,
                        value: fileId,
                    };
                    var whereArgs = [
                        {col: 'project_id', val: id}, 
                        {col: 'phase_id', val: project.current_phase_id},
                        {col: 'phase_field_id', val: phaseFieldId}
                    ];
                    global.dbUpdateRow(global.DB_TABLE_PROJECTS_PHASE_DATA, data, whereArgs);
                } else {
                    var caption = req.body.file_uploads[i].caption;
                    file.uploadFile(req.session.uid, 'project', project.id, caption, media);
                    i++;
                }
            }
        }

        //prepare data for jade
        var allPhasesResults = global.dbSelect(global.DB_TABLE_PHASES);

        var currentPhaseIndex = 0;
        for (var i = 0; i < allPhasesResults.rowCount; i++) {
            if (allPhasesResults.rows[i].id === project.current_phase_id) {
                currentPhaseIndex = i;
                break;
            }
        }

        //console.log("!!!!!!!!!!!!!DEBUG!!!!!!!!!!!!!!");
        //console.log("global.getWhereArgs([{val:[]}])", global.getWhereArgs([{val:[]}]));
        //console.log("global.dbselect([{val:[]}])", global.dbSelect('media', null, [{val:[]}]));
        var projectFiles = file.getProjectFiles(id);
        //console.log("PROJECT FILES", projectFiles);
        var damageReportPhases = file.getProjectDamageReportsFiles(id);
        //console.log("damageReportPhases", damageReportPhases);
        //console.log("!!!!!!!!!!!!!END DEBUG!!!!!!!!!!!!!!");

        var data = {
            title: project.name,
            msgs: msgs,
            id: id,
            project: tools.getNiceObject(project, 'project'),
            currentPhaseIndex: currentPhaseIndex,
            projectFiles: projectFiles,
            damageReportPhases: damageReportPhases,
            allPhases: tools.getRowsOfNiceObjects(allPhasesResults.rows, 'phases'),
            allUsers: tools.getRowsOfNiceObjects(global.dbSelect(global.DB_TABLE_USERS).rows, 'users'),
            projectPrefix: projectPrefix,
        };
        //console.log("DATA", data);
        res.render('projects/edit', data);

    } else {
        console.log("-------------------------------");
        console.log(sprintf("PROJECT %d DOES NOT EXIST", id));
        console.log(queryResults);
        console.log("-------------------------------");

        res.redirect('/projects/');
        res.end();
    }
});