/* @flow */
import warning from 'tiny-warning'
import type {Rule, RuleOptions, JssStyle} from '../types'
import cloneStyle from './cloneStyle'

/**
 * Create a rule instance.
 */
export default function createRule(
  name: string = 'unnamed',
  decl: JssStyle,
  options: RuleOptions
): Rule | null {
  const {jss} = options
  const declCopy = cloneStyle(decl)

  const rule = jss.plugins.onCreateRule(name, declCopy, options)
  if (rule) return rule

  // It is an at-rule and it has no instance.
  if (name[0] === '@') {
    warning(false, `[JSS] Unknown rule ${name}`)
  }

  return null
}