# Copyright (c) 2025 @tam_mt. All rights reserved.

# This work is licensed under the MIT License.
# For a copy, see <https://opensource.org/licenses/MIT>.

# indie:lang_version = 5
from indie import indicator, format, param, source, color, plot, line_style
from indie.algorithms import Rsi, Ma
from indie.plot import LineDisplayOptions

@indicator('RSI + Dual MA', format=format.PRICE)
@param.int('rsi_length', default=14, title='RSI Length', min=1)
@param.source('src', default=source.CLOSE, title='Source')
@param.str('ma_type1', default='EMA', title='MA-1 Type',
           options=['SMA','EMA','SMMA (RMA)','WMA','VWMA'])
@param.int('ma_length1', default=9, title='MA-1 Length', min=1)
@param.str('ma_type2', default='WMA', title='MA-2 Type',
           options=['SMA','EMA','SMMA (RMA)','WMA','VWMA'])
@param.int('ma_length2', default=45, title='MA-2 Length', min=1)

# --- các đường level (dạng line ngang, để fill được) ---
@plot.line(id="l50",  title="Level 50", color=color.YELLOW(0.8), line_style=line_style.DOTTED, display_options=plot.LineDisplayOptions(pane=True, status_line=False, price_label=False))
@plot.line(id="l80",  title="Level 80", color=color.RED(0.5), line_style=line_style.DOTTED, display_options=plot.LineDisplayOptions(pane=True, status_line=False, price_label=False))
@plot.line(id="l70",  title="Level 70", color=color.RED(0.5), line_style=line_style.DOTTED, display_options=plot.LineDisplayOptions(pane=True, status_line=False, price_label=False))
@plot.line(id="l66",  title="Level 66", color=color.BLUE(0.5), line_style=line_style.DOTTED, display_options=plot.LineDisplayOptions(pane=True, status_line=False, price_label=False))
@plot.line(id="l33",  title="Level 33", color=color.BLUE(0.5), line_style=line_style.DOTTED, display_options=plot.LineDisplayOptions(pane=True, status_line=False, price_label=False))
@plot.line(id="l30",  title="Level 30", color=color.RED(0.5), line_style=line_style.DOTTED, display_options=plot.LineDisplayOptions(pane=True, status_line=False, price_label=False))
@plot.line(id="l20",  title="Level 20", color=color.RED(0.5), line_style=line_style.DOTTED, display_options=plot.LineDisplayOptions(pane=True, status_line=False, price_label=False))

# --- đường RSI và 2 MA ---
@plot.line(id="rsi", color=color.AQUA,  title='RSI')
@plot.line(id="ma1", color=color.GREEN, line_width=2, title='EMA9', display_options=plot.LineDisplayOptions(pane=True, status_line=False, price_label=False))
@plot.line(id="ma2", color=color.RED, line_width=2, title='WMA45', display_options=plot.LineDisplayOptions(pane=True, status_line=False, price_label=False))

# --- fill ---
@plot.fill("rsi", "ma2")                                   # động giữa RSI & WMA45
@plot.fill("l70", "l80", color=color.rgba(255, 215, 0, 0.1))  # vàng giữa 70-80
@plot.fill("l20", "l30", color=color.rgba(255, 215, 0, 0.1))  # vàng giữa 20-30
def Main(self, rsi_length, src, ma_type1, ma_length1, ma_type2, ma_length2):
    rsi = Rsi.new(src, rsi_length)
    ma1 = Ma.new(rsi, ma_length1, ma_type1)
    ma2 = Ma.new(rsi, ma_length2, ma_type2)

    # giá trị cho các đường level ngang (giống @level nhưng chủ động)
    v50, v80, v70, v66, v33, v30, v20 = 50.0, 80.0, 70.0, 66.6, 33.3, 30.0, 20.0

    # dynamic fill giữa rsi và ma2
    dyn_col = color.rgba(255, 82, 82, 0.3) if rsi[0] > ma2[0] else color.rgba(0, 187, 212, 0.3)

    return (
        v50, v80, v70, v66, v33, v30, v20,   # 5 đường level
        rsi[0], ma1[0], ma2[0],    # RSI + 2 MA
        plot.Fill(color=dyn_col),  # fill RSI vs WMA45
        plot.Fill(),               # fill l70-l80
        plot.Fill(),               # fill l20-l30
    )
