Week designation
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Matboom

//@version=5
indicator("Week designation", overlay = true)

color_day = input.color(color.new(color.black,50))
color_week = input.color(color.new(color.black,30))
color_month = input.color(color.new(color.black,10))

styleOption = input.string("solid (─)", title="Line Style", options=["solid (─)", "dotted (┈)", "dashed (╌)"])

lineStyle = styleOption == "dotted (┈)" ? line.style_dotted :
     styleOption == "dashed (╌)" ? line.style_dashed :
         line.style_solid

// Determining the session.
// Określenie sesji
startSession(hour, minute) =>
    _start = timestamp(syminfo.timezone, year(timenow), month(timenow), dayofweek(timenow), hour, minute)
    _start := na(_start[1]) ? _start : _start + 7 * 24 * 60 * 60 * 1000 
    // Adding 7 days to move to the next session.
    // Dodajemy 7 dni, aby przenieść się do następnej sesji

// Calling a function to determine the start and end of the current session.
// Wywołanie funkcji do określenia początku i końca bieżącej sesji
session_start = startSession(0, 0)

// Checking if the session starts.
// Sprawdzenie czy sesja się rozpoczyna
isSessionStart = ta.change(time("D")) != 0
isSessionStart_2 = ta.change(time("W")) != 0
isSessionStart_3 = ta.change(time("M")) != 0

// If the session starts, insert a vertical line at the beginning of the session.
// Jeśli sesja się rozpoczyna, wstawienie linii pionowej na początku sesji
if (isSessionStart)
    line.new(x1=bar_index, y1=close, x2=bar_index, y2=close * 1.01, color=color_day, width=1, extend=extend.both,style = lineStyle)

// If the session starts, insert a vertical line at the beginning of the session.
// Jeśli sesja się rozpoczyna, wstawienie linii pionowej na początku sesji
if (isSessionStart_2)
    line.new(x1=bar_index, y1=close, x2=bar_index, y2=close * 1.01, color=color_week, width=1, extend=extend.both,style = lineStyle)

// If the session starts, insert a vertical line at the beginning of the session.
// Jeśli sesja się rozpoczyna, wstawienie linii pionowej na początku sesji
if (isSessionStart_3)
    line.new(x1=bar_index, y1=close, x2=bar_index, y2=close * 1.01, color=color_month, width=1, extend=extend.both,style = lineStyle)

// Checking if the current day is Monday (1 represents Monday).
// Sprawdzenie, czy bieżący dzień to poniedziałek (1 oznacza poniedziałek)
isMonday = dayofweek(time) == 2

// If the session starts or it's Monday, insert a vertical line at the beginning of the session.
// Jeśli sesja się rozpoczyna lub to poniedziałek, wstawienie linii pionowej na początku sesji
if (isSessionStart or isMonday)
    line.new(x1=bar_index, y1=close, x2=bar_index, y2=close * 1.01, color=color_day, width=1, extend=extend.both,style = lineStyle)
