Happy Birthday, let's have some cake! It's my friend's birthday soon and since he is a programmer and ASCII art lover, I thought I'd make him some ASCII cake!

Sadly, I keep forgetting his current age, so I would like to have a program for my ASCII oven, that bakes a cake with a specified number of candles, so I don't have to do it myself again if I am wrong with his age.

ASCII ovens only have limited memory and storage capacity, so it should use the fewest bytes possible.



Your Task:

Write a program that outputs a birthday cake to the console, with as many candles as the input specifies.

Cake requirements are:


It has to have a border, built up of horizontal - and vertical | lines, and vertices +.
Atleast 5 characters wide (including cake border |)
Atleast 5 characters high (including cake border -)
There has to be a whitespace character  between the cake border and the first candle-base (not the flame), on each side, except if there is a flame in that space. A flame or candle-base should not be able to overlap the cake borders.
The maximum width of the cake is 9 characters, so there is a maximum of 5 candles per row.
Since we don't want our cake to be 2-dimensional, it has to be an extra 2 rows high, to give it some volume. Add another border at the bottom and connect the vertices with the ones above them, again using the ASCII characters from above (-, | and +).


Candle requirements are:


Consists of the base | and the flame *, with the flame stacked on top of the base.
Candles may not be directly adjacent to eachother, except diagonally.
Candles are placed left-to-right, then top-to-bottom, with 5 in one line at maximum.
(Note: If there were 5 candles in the previous row, the next row can't possibly have 5 aswell, since then they would be adjacent.)


Additional notes:


The cake width depends on the number of candles in the first row, but it has to be a minimum of 5 characters and a maximum of 9 characters wide.
The candles are filled starting in the top-most row, going left to right. Once one row if full the next one should start in the row below the first one.


Input:

You may accept a number in (reasonable) format you like.

For this challenge you may assume that the number is between 0 and 231 (not including 0), even though I don't acknowledge someone who is this old.

Output:

You can either return a string or directly write the resulting cake into the output console.

Rules:


Standard loopholes are forbidden.
This is code-golf, so shortest code in bytes, in any language, wins.




Examples:

Input: 8

+-----------+
| * * * * * |
| |*|*|*| | |
|  | | |    |
|           |
+-----------+
|           |
+-----------+


Input: 2

+-----+
| * * |
| | | |
|     |
+-----+
|     |
+-----+


Input: 12

+-----------+
| * * * * * |
| |*|*|*|*| |
| *|*|*| |  |
| | | |     |
|           |
+-----------+
|           |
+-----------+




Good luck!
Charcoal, 76 71 70 66 46 bytes

ＮθＦ=+Ｂ⁺³⌊⟦χ⁺θθ⟧÷⁺℅ι⁺θθ⁹↘↘Ｆθ«↑|*¶¶¿‹⁶﹪⁺ιι⁹«Ｍ⁹←↓


Try it online! Link is to verbose version of code. Edit: Saved 1 byte thanks to @ASCII_Only. Saved a massive 20 bytes by discovering a neat way of drawing the candles. Explanation:

ＮθＦ=+Ｂ⁺³⌊⟦χ⁺θθ⟧÷⁺℅ι⁺θθ⁹


Calculate the size both of the whole cake including extra volume and just the top of the cake so that they can be drawn. ((= = ASCII 61) = (+ = ASCII 43) + 9 * 2 for the extra volume.)

↘↘Ｆθ«


Move the cursor to the first row of 5 candles. Loop through each candle.

↑|*¶¶


Print a candle and move right two characters for the next candle.

¿‹⁶﹪⁺ιι⁹«


However after the (zero-indexed) 4th, 8th, 13th, 17th, 22nd etc. candles (that are at the end of a row),

Ｍ⁹←↓


move the cursor to the first candle on the next row. This works on both odd and even rows!