import 'dart:convert';

import 'package:ambito/src/domain/entity/entities.dart';
import 'package:ambito/src/packages/ambito_api/restclient.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';

import '../ambito_db/repositories/baumarten_repository.dart';
import '../ambito_db/repositories/massnahme_repository.dart';

Map<String, int> tables = {
  'massnahmen': 328253,
  'massnahmenkombination': 328217,
  'organismen': 328255,
  'foerderprogramme': 328256,
  'factsheet': 328273,
  'standortansprueche': 328188,
  'referenzumsetzung': 328465,
  'betriebsverzeichnis': 328472,
  'erfahrungsbericht': 330802,
  'genehmigungspflicht': 330806,
  'dienstleister': 330824,
  'ansprechperson': 330832,
  'material': 330836,
  'quellen': 334231,
  'baumarten': 342622,
  'aenderungfactsheet': 330946,
};

class BaseApi {
  Map tables = {};

  init() {
    tables = jsonDecode(dotenv.get('BASEROW_IDS'));
  }

  Future<bool> getContent(String table) async {
    init();
    int tableId = tables[table] ?? 0;
    if (tableId > 0) {
      var response =
          await RestClient().get('$tableId/?user_field_names=true&size=200');
      if (response.statusCode == 200) {
        var json = _jsonDecoded(response.body);
        switch (table) {
          case 'baumarten':
            for (var baumart in json['results']) {
              BaumartenRepository().put(Baumarten.fromJson(baumart));
            }
            break;
          case 'massnahmen':
            for (var massnahme in json['results']) {
              MassnahmeRepository().put(Massnahme.fromJson(massnahme));
            }
            break;
        }
        return true;
      }
      return false;
    }
    return false;
  }

  dynamic _jsonDecoded(String input) {
    return jsonDecode(utf8.decode(input.runes.toList()));
  }
}
