import { Router, Response, Request } from 'express';
import { GolfServicesPage } from '../models/index.js';
import { authenticate, requireRole, AuthRequest } from '../middleware/auth.js';

const router = Router();

const defaultData = {
  heroTitle: { en: 'Golf Services', zh: '高爾夫服務' },
  heroDescription: {
    en: 'We provide our「Golf ID」users with a variety of unique golf bookings and tour experiences, along with tailor-made golf activities and products.',
    zh: '我們為「Golf ID」用戶提供各種獨特的高爾夫預訂和旅遊體驗，以及度身訂造的高爾夫活動和產品。',
  },
  serviceCards: [
    {
      title: { en: 'Group Services', zh: '團體服務' },
      description: { en: 'Professional group and corporate golf event management', zh: '專業團體及企業高爾夫活動管理' },
      link: '/services/group-services',
    },
    {
      title: { en: 'Golf Development Fund', zh: '高爾夫發展基金' },
      description: { en: 'Supporting the growth of golf in the community', zh: '支持社區高爾夫運動的發展' },
      link: '/services/golf-development-fund',
    },
  ],
};

// GET /api/golf-services-page — public
router.get('/', async (req: Request, res: Response): Promise<void> => {
  try {
    let page = await GolfServicesPage.findOne();
    if (!page) {
      page = new GolfServicesPage(defaultData);
      await page.save();
    }
    res.json(page);
  } catch (error) {
    res.status(500).json({ error: 'Server error' });
  }
});

// PUT /api/golf-services-page — admin only
router.put(
  '/',
  authenticate,
  requireRole('admin'),
  async (req: AuthRequest, res: Response): Promise<void> => {
    try {
      let page = await GolfServicesPage.findOne();
      if (!page) {
        page = new GolfServicesPage(req.body);
      } else {
        Object.assign(page, req.body);
      }
      await page.save();
      res.json(page);
    } catch (error) {
      res.status(500).json({ error: 'Server error' });
    }
  }
);

export default router;
