const Joi = require('joi');

module.exports =
  ({ screens }) =>
  (input) => {
    const makeScreenSubUnit = (schema) =>
      Object.keys(screens).reduce(
        (obj, screen) => ({ [screen]: schema, ...obj }),
        {},
      );

    const { error } = Joi.object({
      gridColumns: Joi.number().integer().min(3).required(),
      gridGutterWidth: Joi.string().required(),
      gridGutters: Joi.object().required(),
      generateContainer: Joi.boolean(),
      containerMaxWidths: Joi.object(
        makeScreenSubUnit(Joi.string()),
      ).required(),
      rtl: Joi.boolean(),
      respectImportant: Joi.boolean(),
    })
      .required()
      .validate(input);
    if (error) {
      throw new Error(
        `tailwind-bootstrap-grid options: \n${JSON.stringify(
          input,
          null,
          2,
        )}\nare invalid: ${error} `,
      );
    }
    return input;
  };