import query from '../server-utils/query.js';
import { declareHandler } from '../server-utils/routesHandler.js';

const HUNDRED_SCHOOL_OVERRIDE_CODE = '100school';
const CHECKLIST_COMPLETE_OVERRIDE_CODE = 'checklist_complete';

const overrideSpecs = {
  [HUNDRED_SCHOOL_OVERRIDE_CODE]: {
    months: 0,
    days: 1,
    planId: 2, // pro trial
  },
  [CHECKLIST_COMPLETE_OVERRIDE_CODE]: {
    months: 0,
    days: 1,
    planId: 3, // indie
  },
};

export const selfServeAddPlanOverride = declareHandler({
  func: async (req, res) => {
    const { code } = req.body;
    if (!Object.keys(overrideSpecs).includes(code)) {
      return res.status(403).send('Invalid code.');
    }

    const { email } = req.user;
    const planId = overrideSpecs[code].planId;

    let finalMonths = overrideSpecs[code].months;
    let finalDays = overrideSpecs[code].days;

    if (finalMonths < 0 || finalDays < 0) {
      res.status(400).send('Months and days must be positive');
      return;
    }
    if (finalMonths === 0 && finalDays === 0) {
      res.status(400).send('Must provide either months or days');
      return;
    }

    const existingOverride = await query(`SELECT 1 FROM plan_overrides WHERE email=$1`, [email]);
    if (existingOverride.rows.length > 0) {
      res.status(400).send('Plan override already created for user.');
      return;
    }

    const note = `SELF SERVE USING CODE: ${code}`;
    await query(
      `
      INSERT INTO plan_overrides (email, plan_id, expires_at, note)
      VALUES ($1, $2, NOW() + $3 * INTERVAL '1 month' + $4 * INTERVAL '1 day', $5)
      `,
      [email, planId, finalMonths, finalDays, note]
    );

    res.status(200).send({ success: true });
  },
});
