import 'dart:async';

import 'package:html/parser.dart';
import 'package:http/http.dart';

void main() {
  AudioBookBayApi audioBookBayApi = AudioBookBayApi();
  audioBookBayApi
      .scrapBookDetails('/audio-books/free-air-1919-sinclair-lewis/');
}

class AudioBookBayApi {
//scrapBookDetails('/audio-books/free-air-1919-sinclair-lewis/');
//scrapSearchData('harry');
//scrapDataCatWise('/audio-books/type/adults/');

  var _document;

  Future loadFullURL(String page) async {
    var client = Client();
    try {
      var _response = await client.get(Uri.parse(page));
      _document = parse(_response.body);
    } catch (e) {
      print(e.toString());
    }
    return true;
  }

  Future scrapBookDetails(String q) async {
    List simTorrData = [];
    await loadFullURL('http://audiobookbay.nl$q');
    var title = _document.getElementsByClassName('postTitle')[0].text;
    var cat = _document.getElementsByClassName('postInfo')[0].text.trim();
    var desc1 = _document.getElementsByClassName('desc')[0].outerHtml.toString();
    var imgHtml =
        parse(_document.getElementsByClassName('postContent')[0].outerHtml);
    var dllinks =
        parse(_document.getElementsByClassName('torrent_info')[0].outerHtml);
    var img = imgHtml.getElementsByTagName('img')[0].attributes['src'];
    var torrent = dllinks.getElementsByTagName('a')[0].attributes['href'];
    var dawn = dllinks.getElementsByTagName('a')[1].attributes['href'];
    var anon = dllinks.getElementsByTagName('a')[2].attributes['href'];
    var alltds = dllinks.getElementsByTagName('td').toList();
    var status1 = false;
    var status2 = false;
    var hash = "";
    List trackers = [];
    for (var i = 0; i < alltds.length; i++) {
      var td = alltds[i];
      if (status1) {
        trackers.add(td.text);
      } else if (status2) {
        hash = td.text;
      }

      if (td.text == "Tracker:") {
        status1 = true;
      } else if (td.text == "Info Hash:") {
        status2 = true;
      } else {
        status1 = false;
        status2 = false;
      }
    }
    var similarHtml = parse(_document.getElementById('rsidebar').outerHtml);
    var a = similarHtml.getElementsByTagName('a').toList();
    for (var i = 0; i < a.length; i++) {
      var href = a[i].attributes['href'];
      var title = a[i].text;
      if (title.trim() != "") {
        simTorrData.add({
          "title": title,
          "href": href,
        });
      }
    }
    var magnet = "magnet:?xt=urn:btih:$hash&tr=" + trackers.join('&tr=');
    var finalOut = {
      "title": title,
      "cat": cat,
      "torrent": "http://audiobookbay.nl/$torrent",
      "dawnload": "http://audiobookbay.nl/$dawn",
      "anon": "http://audiobookbay.nl/$anon",
      "magnet": magnet,
      "img": img,
      "description": desc1,
      "similar": simTorrData
    };
    print(finalOut);
    return finalOut;
  }

  Future scrapDataCatWise(String q) async {
    List finalOut = [];
    finalOut = await scrapSearchTorrent('http://audiobookbay.nl$q');
    return finalOut;
  }

  Future scrapSearchData(String q) async {
    List finalOut = [];
    finalOut = await scrapSearchTorrent('http://audiobookbay.nl/?s=$q');
    return finalOut;
  }

  Future scrapSearchTorrent(String q) async {
    List torrData = [];
    await loadFullURL('$q');
    var tables = _document.getElementsByClassName('post');
    for (int i = 0; i < tables.length; i++) {
      var htmlParse = parse(tables[i].outerHtml);

      torrData.add({
        'title': htmlParse.getElementsByTagName('h2').toList()[0].text,
        'url':
            htmlParse.getElementsByTagName('a').toList()[0].attributes['href'],
        'img':
            htmlParse.getElementsByTagName('img').toList()[0].attributes['src'],
        'cat': htmlParse
            .getElementsByClassName('postInfo')
            .toList()[0]
            .text
            .trim(),
        'postContent': htmlParse
            .getElementsByClassName('postContent')
            .toList()[0]
            .text
            .trim(),
      });
    }
    print(torrData);
    return torrData;
  }
}