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

export const queryPlansWithFeatures = async () => {
  const queryResult = await query(
    `
      SELECT
        plans.name AS plan,
        features.code AS feature
      FROM
        plans
      JOIN
        plan_app_features ON plans.id = plan_app_features.plan_id
      JOIN
        app_features AS features ON plan_app_features.app_feature_id = features.id;
    `,
    []
  );
  const table = queryResult.rows.reduce(
    (acc, row) => {
      const { plan, feature } = row;
      if (!acc[feature]) {
        acc[feature] = [];
      }
      acc[feature].push(plan);
      return acc;
    },
    {} as Record<string, string[]>
  );
  return table;
};

export const getPlansWithFeatures = declareHandler({
  func: async (req, res) => {
    const table = await queryPlansWithFeatures();
    res.send(table);
  },
});
