#!/usr/bin/python3

import os
import sys
import telepot
import mutagen
import requests
from requests import Request, Session
from urllib.parse import urlparse
from pprint import pprint
from mutagen.mp3 import MP3
from mutagen.flac import FLAC
from mutagen.easyid3 import EasyID3
from telepot.namedtuple import (
    ReplyKeyboardMarkup, KeyboardButton,
    ReplyKeyboardRemove, InlineKeyboardMarkup,
    InlineKeyboardButton, InlineQueryResultArticle, InputTextMessageContent
)
masterUserId = 837696118
adminUserId = "837696118"
userId = sys.argv[1]
audio_path = sys.argv[2]
image = sys.argv[3]

if len(sys.argv) > 4:
  adminUserId = sys.argv[4];

bot_token = "1474444432:AAH7YKrlJqyO-zqDjf2lRqUA3y-F3BUulto"

bot = telepot.Bot(bot_token)


def request(url, chat_id=None, control=False):
  try:
    thing = requests.get(url)
  except:
    thing = requests.get(url)

  if control == True:
      try:
        if thing.json()['error']['message'] == "Quota limit exceeded":
          #sendMessage(chat_id, "Please send the link again :(")
          return
      except KeyError:
        pass

      try:
        if thing.json()['error']:
          #sendMessage(chat_id, "No result has been found :(")
          return
      except KeyError:
        pass
  return thing


def sendMessage(chat_id, text, reply_markup=None, reply_to_message_id=None):

  try:
    keyboard = InlineKeyboardMarkup(inline_keyboard=[
      [InlineKeyboardButton(text="❌", callback_data='delete_message')],
    ])
    bot.sendMessage(
      chat_id,
      text,
      reply_markup=keyboard,
      reply_to_message_id=reply_to_message_id,
      disable_notification=True,
      disable_web_page_preview=True,
      parse_mode='HTML'
    )
  except Exception as a:
    print(a)

def sendAudio(chat_id, audio, adminUserId, image=None):

  try:
    if os.path.isfile(audio):
      try:
        tag = EasyID3(audio)
        id3 = mutagen.id3.ID3(audio)
        frame = mutagen.id3.COMM(encoding=3, lang='eng', desc=u'')
        id3.add(frame)
        id3.save()

        duration = int(
            MP3(
              audio
            ).info.length
        )
      except mutagen.id3._util.ID3NoHeaderError:
        tag = FLAC(audio)
        tag.save()
        duration = int(
          tag.info.length
        )

      if os.path.getsize(audio) < 50000000:
        data = {
          "chat_id": chat_id,
          "duration": duration,
          "performer": tag['artist'][0],
          "title": tag['title'][0]
        }

        file_param = {
          "audio": open(audio, "rb"),
          "thumb": image
        }

        url = "https://api.telegram.org/bot" + bot_token + "/sendAudio"
        try:

          request = requests.request(
            "GET",
            url,
            params=data,
            files=file_param,
            timeout=15
          )
        except Exception as e:
          print(e)
          request = requests.request(
            "GET",
            url,
            params=data,
            files=file_param,
            timeout=15
          )

        pprint(
          request.json()
        )

        file_id = request.json()['result']['audio']['file_id']
        
        quality = (
          audio
          .split("(")[-1]
          .split(")")[0]
        )
      else:
        sendMessage(adminUserId, "Sorry, but Telegram doesn't allow sending music files bigger than 50MB :(\nPlease lower the download quality for this track\n" + audio)
    else:
      bot.sendAudio(chat_id, audio)

  except telepot.exception.TelegramError as e:
    print(e)
    sendMessage(adminUserId, "Sorry this track doesn't seem readable :(")
    exText = 'Telepot exception caugth: {}\nSys args{}'.format(e, sys.argv)
    bot.sendMessage(chat_id=masterUserId, text=exText)

  except Exception as a:
    print(a)
    sendMessage(adminUserId, "Error on sending audio: Internal server exception 457" + a)


try:
  image = request(image).content
  sendAudio(userId, audio_path, adminUserId, image)
except Exception as e:
  print(e)

print("All done")
