const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const path = require('path');
const app = express();

const PORT = process.env.PORT || 4000;
const cookieParser = require('cookie-parser');
require('dotenv').config();
// const {
//     emailUpcomingGoals,
//     emailNotifications,
// } = require('./middleware/cronJobs');
const morgan = require('morgan')
const helmet = require('helmet');

const authRoutes = require('./routes/authRoutes');
const profileRoutes = require('./routes/profileRoutes');
const emailRoutes = require('./routes/emailRoutes');
const goalRoutes = require('./routes/goalRoutes');
const taskRoutes = require('./routes/taskRoutes');
const feedRoutes = require('./routes/feedRoutes');
const friendRoutes = require('./routes/friendRoutes');
const dataRoutes = require('./routes/dataRoutes');
const notificationRoutes = require('./routes/notificationRoutes');
const otherRoutes = require('./routes/otherRoutes');
const noteRoutes = require('./routes/noteRoutes');
const paymentRoutes = require('./routes/paymentRoutes');
const awardsRoutes = require('./routes/awardsRoutes');
const habitRoutes = require('./routes/habitRoutes');
const learnRoutes = require('./routes/learnRoutes');
const courseRoutes = require('./routes/courseRoutes');

// Middleware
app.use(
    helmet({
        contentSecurityPolicy: false
    })
);

app.use(express.static(path.join(__dirname, 'build')));
app.use(express.urlencoded({ extended: true }));
app.use((req, res, next) => {
    if (req.originalUrl.startsWith('/webhook')) {
      next();
    } else {
      express.json()(req, res, next);
    }
});
app.use(cookieParser());
app.use(cors());
app.use(morgan('short'));

// mongo connection
mongoose.Promise = global.Promise;
const dbURL = process.env.NODE_ENV !== "production" ? process.env.MDBS : process.env.MDBP;
// const dbURL = process.env.MDBP;

mongoose.connect(dbURL)
.then((result) => {
    app.listen(PORT, () => {
        console.log(`Your server is running on port ${PORT}`)
    })
})
.catch((err) => console.log(err));

// Routes
app.use(authRoutes);
app.use(emailRoutes);
app.use(profileRoutes);
app.use(goalRoutes);
app.use(taskRoutes);
app.use(feedRoutes);
app.use(friendRoutes);
app.use(noteRoutes);
app.use(dataRoutes);
app.use(notificationRoutes);
app.use(awardsRoutes);
app.use(otherRoutes);
app.use(paymentRoutes);
app.use(habitRoutes);
app.use(learnRoutes);
app.use(courseRoutes);
// app.use(analyzerRoutes);

// Cron jobs
// emailUpcomingGoals;
// emailNotifications;

app.get('/*', (req, res)=>{
    res.sendFile(path.join(__dirname, 'build', 'index.html'));
});