import dotenv from 'dotenv';
dotenv.config({ path: __dirname + '/../.env' });

import express from 'express';
import cors from 'cors';
import helmet from 'helmet';
import { authMiddleware } from './middleware/auth';
import authRoutes from './routes/auth';
import dashboardRoutes from './routes/dashboard';
import contactsRoutes from './routes/contacts';
import conversationsRoutes from './routes/conversations';
import messagesRoutes from './routes/messages';
import analyticsRoutes from './routes/analytics';
import syncRoutes from './routes/sync';
import agentsRoutes from './routes/agents';
import queriesRoutes from './routes/queries';
import chachingRoutes from './routes/chaching';
import marketingRoutes from './routes/marketing';
import marketingClawRoutes from './routes/marketing-claw';
import learningRoutes from './routes/learning';
import cacheRoutes from './routes/cache';
import poolRoutes from './routes/pool';
import rainmakerRoutes from './routes/rainmaker';
import weatherReportRoutes from './routes/weather-report';
import archivesRoutes from './routes/archives';
import complianceRoutes from './routes/compliance';
import conversionsRoutes from './routes/conversions';
import trafficRoutes from './routes/traffic';
import apiUsageRoutes from './routes/api-usage';

const app = express();
const PORT = parseInt(process.env.PORT || '3011');

app.use(helmet());
app.use(cors({
  origin: ['http://localhost:3010', 'https://crm.sportsclaw.guru'],
  credentials: true,
}));
app.use(express.json({ limit: '1mb' }));

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

// Auth (public)
app.use('/api/auth', authRoutes);

// Protected routes
app.use('/api/dashboard', authMiddleware, dashboardRoutes);
app.use('/api/contacts', authMiddleware, contactsRoutes);
app.use('/api/conversations', authMiddleware, conversationsRoutes);
app.use('/api/messages', authMiddleware, messagesRoutes);
app.use('/api/analytics', authMiddleware, analyticsRoutes);
app.use('/api/sync', authMiddleware, syncRoutes);
app.use('/api/agents', authMiddleware, agentsRoutes);
app.use('/api/queries', authMiddleware, queriesRoutes);
app.use('/api/chaching', authMiddleware, chachingRoutes);
app.use('/api/marketing', authMiddleware, marketingRoutes);
app.use('/api/marketing/claw', authMiddleware, marketingClawRoutes);
app.use('/api/learning', authMiddleware, learningRoutes);
app.use('/api/cache', authMiddleware, cacheRoutes);
app.use('/api/pool', authMiddleware, poolRoutes);
app.use('/api/rainmaker', authMiddleware, rainmakerRoutes);
app.use('/api/weather-report', authMiddleware, weatherReportRoutes);
app.use('/api/archives', authMiddleware, archivesRoutes);
app.use('/api/compliance', authMiddleware, complianceRoutes);
app.use('/api/conversions', authMiddleware, conversionsRoutes);
app.use('/api/traffic', authMiddleware, trafficRoutes);
app.use('/api/api-usage', authMiddleware, apiUsageRoutes);

app.listen(PORT, '127.0.0.1', () => {
  console.log(`Claw CRM API running on http://127.0.0.1:${PORT}`);
});
