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

const router = Router();

const defaultGolfId = {
  heroTitle: { en: 'Golf ID', zh: '高球証' },
  heroSubtitle: {
    en: 'We offer top merchant deals and services to golfers, allowing you to enjoy exclusive offers and rewards.',
    zh: '我們為高爾夫愛好者提供優質商戶優惠及服務，讓您享受獨家優惠及獎勵。',
  },
  heroCtaText: { en: 'Register Golf ID Now', zh: '立即登記高球証' },
  heroCtaLink: 'https://golfcard.com.hk/register',
  benefits: [
    {
      title: { en: 'Free Golf Clinic', zh: '免費教練指導' },
      description: {
        en: 'Multiple indoor golf venues across Hong Kong with free 1-on-1 PGA-certified coaching',
        zh: '多個香港室內高爾夫場地，由PGA認證教練提供免費一對一指導',
      },
      highlight: { en: '1', zh: '1' },
    },
    {
      title: { en: '50% OFF Green Fees', zh: '果嶺球費半價' },
      description: {
        en: 'Curated top golf courses in Thailand, Japan, Korea, China, Vietnam, Scotland and beyond',
        zh: '涵蓋泰國、日本、韓國、中國、越南、蘇格蘭等全球頂級球場',
      },
      highlight: { en: '50%', zh: '50%' },
    },
    {
      title: { en: '$300 Golf Credits', zh: '$300高球簽賬' },
      description: {
        en: 'Special discounts on golf purchases and priority access to limited-edition products',
        zh: '高球相關消費專享折扣及限量產品優先購買權',
      },
      highlight: { en: '$300', zh: '$300' },
    },
  ],
  sections: [
    {
      title: { en: 'Welcome Offers', zh: '迎新優惠' },
      description: {
        en: 'Exclusive welcome offers for new members, redeemable within 180 days',
        zh: '新會員專享迎新優惠，180天內可兌換',
      },
      ctaText: { en: 'Welcome Offers', zh: '迎新優惠' },
      ctaLink: '/golf-id/membership-offers',
    },
    {
      title: { en: 'Year-round Offers', zh: '全年優惠' },
      description: {
        en: 'Year-round exclusive offers from merchant partners',
        zh: '全年享受各大商戶獨家優惠',
      },
      ctaText: { en: 'Year-round Offers', zh: '全年優惠' },
      ctaLink: '/golf-id/upgrade-offers',
    },
    {
      title: { en: 'Member Rewards', zh: '會員獎勵' },
      description: {
        en: 'Earn 1 point per HK$1 spent, redeemable for golf products',
        zh: '消費每HK$1賺取1積分，可兌換高球產品',
      },
      ctaText: { en: 'Member Rewards', zh: '會員獎勵' },
      ctaLink: '/golf-id/member-rewards',
    },
  ],
  ctaTitle: { en: 'Activate Golf ID Now!', zh: '立即激活高球証！' },
  ctaHotline: '(852) 3582-3088',
  ctaButtonText: { en: 'Register Golf ID Now', zh: '立即登記高球証' },
  ctaButtonLink: 'https://golfcard.com.hk/register',
};

router.get('/', async (req: Request, res: Response): Promise<void> => {
  try {
    let golfId = await GolfId.findOne();

    if (!golfId) {
      golfId = new GolfId(defaultGolfId);
      await golfId.save();
    }

    res.json(golfId);
  } catch (error) {
    res.status(500).json({ error: 'Server error' });
  }
});

router.put(
  '/',
  authenticate,
  requireRole('admin'),
  async (req: AuthRequest, res: Response): Promise<void> => {
    try {
      let golfId = await GolfId.findOne();

      if (!golfId) {
        golfId = new GolfId(req.body);
      } else {
        Object.assign(golfId, req.body);
      }

      await golfId.save();
      res.json(golfId);
    } catch (error) {
      res.status(500).json({ error: 'Server error' });
    }
  }
);

export default router;
