# indie:lang_version = 5
from indie import indicator, param, plot, color, line_style
from indie.algorithms import Ema, Atr

@indicator('MTC Triple Keltner Channels', overlay_main_pane=True)
@param.int('short_ema_length', default=10, min=1, title='Short EMA Length')
@param.float('short_ema_multiplier', default=1.5, min=0.1, title='Short EMA Multiplier')
@param.int('medium_ema_length', default=30, min=1, title='Medium EMA Length')
@param.float('medium_ema_multiplier', default=3.0, min=0.1, title='Medium EMA Multiplier')
@param.int('long_ema_length', default=60, min=1, title='Long EMA Length')
@param.float('long_ema_multiplier', default=6.0, min=0.1, title='Long EMA Multiplier')
@plot.line('short_lower', color=color.rgba(139, 0, 0, 1), title='Short Lower Band')
@plot.line('short_middle', color=color.rgba(139, 0, 0, 1), title='Short Middle Band', line_style=line_style.DASHED)
@plot.line('short_upper', color=color.rgba(139, 0, 0, 1), title='Short Upper Band')
@plot.line('medium_lower', color=color.GREEN, title='Medium Lower Band')
@plot.line('medium_middle', color=color.GREEN, title='Medium Middle Band', line_style=line_style.DASHED)
@plot.line('medium_upper', color=color.GREEN, title='Medium Upper Band')
@plot.line('long_lower', color=color.BLUE, title='Long Lower Band')
@plot.line('long_middle', color=color.BLUE, title='Long Middle Band', line_style=line_style.DASHED)
@plot.line('long_upper', color=color.BLUE, title='Long Upper Band')
@plot.fill('short_lower', 'short_upper', color=color.rgba(139, 0, 0, 0.025), title='Short Channel Fill', id='#fill_9')
@plot.fill('medium_lower', 'medium_upper', color=color.GREEN(0.025), title='Medium Channel Fill', id='#fill_10')
@plot.fill('long_lower', 'long_upper', color=color.BLUE(0.025), title='Long Channel Fill', id='#fill_11')
def Main(self, short_ema_length, short_ema_multiplier, medium_ema_length, medium_ema_multiplier, long_ema_length, long_ema_multiplier):
    # Calculate EMAs and ATRs
    short_ema = Ema.new(self.close, short_ema_length)[0]
    medium_ema = Ema.new(self.close, medium_ema_length)[0]
    long_ema = Ema.new(self.close, long_ema_length)[0]
    short_atr = Atr.new(short_ema_length)[0]
    medium_atr = Atr.new(medium_ema_length)[0]
    long_atr = Atr.new(long_ema_length)[0]

    # Calculate bands
    short_upper_band = short_ema + short_ema_multiplier * short_atr
    short_lower_band = short_ema - short_ema_multiplier * short_atr
    medium_upper_band = medium_ema + medium_ema_multiplier * medium_atr
    medium_lower_band = medium_ema - medium_ema_multiplier * medium_atr
    long_upper_band = long_ema + long_ema_multiplier * long_atr
    long_lower_band = long_ema - long_ema_multiplier * long_atr

    # Return bands and fills including dashed middle lines
    return (
        plot.Line(short_lower_band),
        plot.Line(short_ema),
        plot.Line(short_upper_band),
        plot.Line(medium_lower_band),
        plot.Line(medium_ema),
        plot.Line(medium_upper_band),
        plot.Line(long_lower_band),
        plot.Line(long_ema),
        plot.Line(long_upper_band),
        plot.Fill(),
        plot.Fill(),
        plot.Fill()
    )
