import copy
import fastapi
import fastapi.staticfiles as fastapiStaticfiles
app = fastapi.FastAPI()
app.mount(
    '/static', fastapiStaticfiles.StaticFiles(directory='static'), name='static')


from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage,ImageSendMessage, TextSendMessage,FlexSendMessage, TemplateSendMessage,CarouselTemplate,ConfirmTemplate,PostbackAction,MessageAction,CarouselColumn,URIAction
)
import json
import codecs

#colors=[{'c1':}]
## json editor : https://jsonformatter.org/json-editor

fr=codecs.open('/home/jared/src/pi/bubble.json','r','utf-8')
lines=fr.readlines()
content=' '.join(lines)
fr.close()

objelmt=json.loads(content)
objelmt['body']['contents'][0]['contents'][0]['text']='this is a test'

objelmt['header']['contents'][2]['contents'][0]['backgroundColor']='#0D8186'
objelmt['header']['contents'][2]['backgroundColor']='#9FD8E36E'
objelmt['header']['backgroundColor']='#27ACB2'

##7D51E4
objelmt2=copy.deepcopy(objelmt)
objelmt2['header']['contents'][2]['contents'][0]['backgroundColor']='#7D51E4'
objelmt2['header']['contents'][2]['backgroundColor']='#9FD8E36E'
objelmt2['header']['backgroundColor']='#A17DF5'


##7D51E4
objelmt3=copy.deepcopy(objelmt)
objelmt3['header']['contents'][2]['contents'][0]['backgroundColor']='#DE5658'
objelmt3['header']['contents'][2]['backgroundColor']='#FAD2A76E'
objelmt3['header']['backgroundColor']='#FF6B6E'


objelmt4=copy.deepcopy(objelmt)
objelmt4['header']['contents'][2]['contents'][0]['backgroundColor']='#0367D3'
objelmt4['header']['contents'][2]['backgroundColor']='#FAD2A76E'
objelmt4['header']['backgroundColor']='#2387F3'


objelmt5=copy.deepcopy(objelmt)
objelmt5['header']['contents'][2]['contents'][0]['backgroundColor']='#FFC107'
objelmt5['header']['contents'][2]['backgroundColor']='#FAD2A76E'
objelmt5['header']['backgroundColor']='#FFE127'


objelmt6=copy.deepcopy(objelmt)
objelmt6['header']['contents'][2]['contents'][0]['backgroundColor']='#343A40'
objelmt6['header']['contents'][2]['backgroundColor']='#FAD2A76E'
objelmt6['header']['backgroundColor']='#545A60'


objelmt7=copy.deepcopy(objelmt)
objelmt7['header']['contents'][2]['contents'][0]['backgroundColor']='#17A2B8'
objelmt7['header']['contents'][2]['backgroundColor']='#FAD2A76E'
objelmt7['header']['backgroundColor']='#37C2D8'



jsobj={"type": "carousel", "contents": [objelmt,objelmt2,objelmt3,objelmt4,objelmt5,objelmt6,objelmt7]}



line_bot_api = LineBotApi('FvP2AkKj3FSuTjY8Jhwn23DPIb38yDZBliLrDjRA8j+UOQPku+kH2Bz2coDFl4gruRAiLuHuBbtRpILXlN54zJ+bWF5IwU86FClG47VZxCcDcAkhwqCqjYi/Ju7dBzlg963d9CV1KiiBwoiqvV6J7AdB04t89/1O/w1cDnyilFU=')
handler = WebhookHandler('58a73d69c3ad6416e0b465e64c30526a')
#line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
#handler = WebhookHandler('YOUR_CHANNEL_SECRET')


@app.post('/callback')
async def callback(request: fastapi.Request):
    signature = request.headers['X-Line-Signature']
    body = await request.body()
    bot.handle(body.decode('utf-8'), signature)
    return 'OK'


@bot.add(linebotModels.MessageEvent, message=linebotModels.TextMessage)
def message_text(event):
    if event.message.text == '叫':
        lineBotApi.reply_message(
            event.reply_token, linebotModels.AudioSendMessage(
                original_content_url=f'{baseUrl}/static/audio/noot_noot.mp3', duration=1000))




#@app.route("/callback", methods=['POST','GET'])
def callback():
    # get X-Line-Signature header value
    signature = request.headers['X-Line-Signature']

    # get request body as text
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)
    print("Request body: " + body)
    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        print("Invalid signature. Please check your channel access token/channel secret.")
        abort(400)

    return 'OK',200

@app.route('/', methods=['GET'])
def serve():
    return "Hello world", 200

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    print(event.message.text)
    if event.message.text=='業績':
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text='您本月營收為9,287元'))

    if event.message.text=='新貨':
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text='寶貝的毛巾該換囉！　\
小朋友開學必備！家中必備！ \
這款小方巾，不論是洗臉、嬰兒擦口水 \
或是帶去學校當手帕都很適合 '))


    if event.message.text=='防蚊':
        url='https://pic.pimg.tw/youwin721/1593748433-4270703895-g.png'
        line_bot_api.reply_message(
            event.reply_token,
            ImageSendMessage(url,url))


    if event.message.text=='華 地址':
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text='林曉華的收件地址是: 110台北市信義區嘉興街235號'))






    if event.message.text=='AA':
        confirm_template_message = TemplateSendMessage(
            alt_text='Confirm template',
            template=ConfirmTemplate(
                text='Are you sure?',
                actions=[
                    PostbackAction(
                        label='postback',
                        display_text='postback text',
                        data='action=buy&itemid=1'
                    ),
                    MessageAction(
                        label='message',
                        text='message text'
                    )
                ]
            )
        )

        line_bot_api.reply_message(event.reply_token,confirm_template_message)





    elif event.message.text=='cc':

        flex_message = FlexSendMessage(
            alt_text='hello',
            contents=jsobj
        )
        line_bot_api.reply_message(event.reply_token,flex_message)


    elif event.message.text=='BB':
        carousel_template_message = TemplateSendMessage(
            alt_text='Carousel template',
            template=CarouselTemplate(
                columns=[
                    CarouselColumn(
                        thumbnail_image_url='https://github.githubassets.com/images/modules/site/logos/ibm-logo.png',
                        title='this is menu1',
                        text='description1',
                        actions=[
                            PostbackAction(
                                label='postback1',
                                display_text='postback text1',
                                data='action=buy&itemid=1'
                            ),
                            MessageAction(
                                label='message1',
                                text='message text1'
                            ),
                            URIAction(
                                label='uri1',
                                uri='http://example.com/1'
                            )
                        ]
                    ),
                    CarouselColumn(
                        thumbnail_image_url='https://github.githubassets.com/images/modules/site/logos/ibm-logo.png',
                        title='this is menu2',
                        text='description2',
                        actions=[
                            PostbackAction(
                                label='postback2',
                                display_text='postback text2',
                                data='action=buy&itemid=2'
                            ),
                            MessageAction(
                                label='message2',
                                text='message text2'
                            ),
                            URIAction(
                                label='uri2',
                                uri='http://example.com/2'
                            )
                        ]
                    )
                ]
            )
        )
        line_bot_api.reply_message(event.reply_token,carousel_template_message)

    else:
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text=event.message.text))


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=443,ssl_context=('/etc/letsencrypt/live/ptt.cx/fullchain.pem', '/etc/letsencrypt/live/ptt.cx/privkey.pem'))
#    app.run(host='0.0.0.0', port=14404,ssl_context=('/tmp/cert.pem','/tmp/chain.pem' ))

