/*
	stylus-boilerplate

	callouts.styl

	Author: Sean Goresht

	Calllouts (or text bubbles), which can be configured to point in any direction via class names
	@example
		.speech-bubble
			@extend $callout, $callout--top-right
*/

$calloutColour ?= #ffffff
$calloutPadding ?= 0.5em
$calloutTextColour ?= luminosity($calloutColour) > 0.5 ? black : white

$calloutBorderWidth ?= 1px
$calloutBorderStyle ?= solid
$calloutBorderColour ?= luminosity($calloutColour) > 0.5 ? $calloutColour - 25 : $calloutColour + 25

$calloutTipColour ?= luminosity($calloutColour) > 0.5 ? $calloutColour - 90 : $calloutColour + 90
$calloutTipSize ?= 0.5em
$calloutTipXPositions ?= left middle right
$calloutTipYPositions ?= top middle bottom
$calloutTipOffset ?= $calloutTipSize * -1

calloutTipPosition(x, y = false)
	&:before, &:after
		if x is middle
			left 50%
		else if x is right
			right 0
		else if x is left
			left 0
	if y
		if y is bottom
			&:before, &:after
				bottom $calloutTipOffset
				border-right $calloutTipSize $calloutBorderStyle transparent
				border-left $calloutTipSize $calloutBorderStyle transparent
				border-top $calloutTipSize $calloutBorderStyle $calloutTipColour
			&:after
				border-top $calloutTipSize $calloutBorderStyle $calloutColour
		else if y is middle
			if x is right or x is left
				if x is right
					&:before, &:after
						bottom 50%
						right $calloutTipOffset
						border-top $calloutTipSize $calloutBorderStyle transparent
						border-bottom $calloutTipSize $calloutBorderStyle transparent
						border-left $calloutTipSize $calloutBorderStyle $calloutTipColour
					&:after
						border-left $calloutTipSize $calloutBorderStyle $calloutColour
				else if x is left
					&:before, &:after
						left $calloutTipOffset
						bottom 50%
						border-top $calloutTipSize $calloutBorderStyle transparent
						border-bottom $calloutTipSize $calloutBorderStyle transparent
						border-right $calloutTipSize $calloutBorderStyle $calloutTipColour
					&:after
						border-right $calloutTipSize $calloutBorderStyle $calloutColour
			else
				warn("Please provide a valid x position: left, middle, right")
		else
			&:before, &:after
				top $calloutTipOffset
				border-right $calloutTipSize $calloutBorderStyle transparent
				border-bottom $calloutTipSize $calloutBorderStyle $calloutTipColour
				border-left $calloutTipSize $calloutBorderStyle transparent
			&:after
				border-bottom $calloutTipSize $calloutBorderStyle $calloutColour
	else
		top $calloutTipOffset

$callout
	color $calloutTextColour
	display inline-block
	position relative
	padding $calloutPadding
	background $calloutColour
	border $calloutBorderWidth $calloutBorderStyle $calloutBorderColour
	&:before, &:after
		display inline-block
		position absolute
		content ""

for horizontalPosition in $calloutTipXPositions
	for verticalPosition in $calloutTipYPositions
		.callout-{verticalPosition}-{horizontalPosition}
			@extend $callout
			calloutTipPosition(horizontalPosition, verticalPosition)
