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

const router = Router();

const defaultData = {
  heroTitle: { en: 'Upgrade Offers', zh: '升級優惠' },
  heroSubtitle: {
    en: 'Exclusive year-round offers for Golf ID credit card members',
    zh: '高球証信用卡會員專享全年優惠',
  },
  highlights: [],
  featureSections: [],
  upgradeTiers: [],
  termsAndConditions: {
    en: 'All monetary terms are denominated in Hong Kong Dollars (HKD); Terms and conditions are subject to change without prior notice; Limited offers, first come first served; Golf ID credit card members can redeem Welcome Offers once per partner; All offers must be redeemed within 1 year after the Golf ID card is successfully activated; GLG & Merchant Partners retain sole & final authority regarding all matters.',
    zh: '所有金額以港幣（HKD）計算；條款及細則如有更改，恕不另行通知；優惠數量有限，先到先得；高球証信用卡會員每位合作夥伴只可兌換迎新優惠一次；所有優惠須於高球証成功激活後一年內兌換；GLG及商戶合作夥伴保留所有事項的最終決定權。',
  },
  ctaTitle: { en: 'Enjoy Golf ID Now!', zh: '立即尊享高球証！' },
  ctaHotline: '(852) 3582-3088',
  ctaButtonText: { en: 'Enjoy Golf ID', zh: '尊享高球証' },
  ctaButtonLink: 'https://golfcard.com.hk/register',
};

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

    if (!doc) {
      doc = new UpgradeOffers(defaultData);
      await doc.save();
    }

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

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

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

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

export default router;
