import express from 'express'
import cors from 'cors'
import dotenv from 'dotenv'
import csvRoutes from './routes/csv'
import analyticsRoutes from './routes/analytics'
import reportsRoutes from './routes/reports'
import schedulesRoutes from './routes/schedules'
import { initializeReportService } from './services/reportService'
import { initializeEmailService } from './services/emailService'
import { initializeAlertService } from './services/alertService'
import db from './database/setup'
import { createReportScheduleTable } from './models/ReportSchedule'
import alertsRoutes from './routes/alerts'
import chatRoutes from './routes/chat'
import merchantRoutes from './routes/merchant'

dotenv.config()

// Initialize database tables
createReportScheduleTable(db)

// Initialize report scheduling service
initializeReportService(db)

// Initialize alert service
initializeAlertService(db)

// Initialize email service if configured
if (
  process.env.SMTP_HOST &&
  process.env.SMTP_USER &&
  process.env.SMTP_PASS
) {
  initializeEmailService({
    host: process.env.SMTP_HOST,
    port: parseInt(process.env.SMTP_PORT || '587'),
    secure: process.env.SMTP_PORT === '465',
    user: process.env.SMTP_USER,
    pass: process.env.SMTP_PASS,
    from: process.env.SMTP_FROM || 'noreply@100mlstore.com',
  })
}

const app = express()
const PORT = process.env.PORT || 3000

app.use(cors())
app.use(express.json())
app.use(express.urlencoded({ extended: true }))

// Routes
app.use('/api/csv', csvRoutes)
app.use('/api/analytics', analyticsRoutes)
app.use('/api/reports', reportsRoutes)
app.use('/api/schedules', schedulesRoutes)
app.use('/api/alerts', alertsRoutes)
app.use('/api/chat', chatRoutes)
app.use('/api/merchant', merchantRoutes)

// Health check
app.get('/api/health', (req, res) => {
  res.json({ status: 'ok', timestamp: new Date().toISOString() })
})

app.listen(PORT, () => {
  console.log(`Server running on http://localhost:${PORT}`)
})
