import 'dart:convert';

import 'package:np_db/np_db.dart';
import 'package:np_db_sqlite/src/converter.dart';
import 'package:np_db_sqlite/src/database.dart';
import 'package:np_db_sqlite/src/database_extension.dart';
import 'package:test/test.dart';

void main() {
  group("AlbumConverter", () {
    group("fromSql", () {
      test("no share", _AlbumConverter.fromSqlNoShare);
    });
  });
}

abstract class _AlbumConverter {
  static void fromSqlNoShare() {
    final sqlAlbum = Album(
      rowId: 1,
      file: 1,
      fileEtag: "8a3e0799b6f0711c23cc2d93950eceb5",
      version: 8,
      lastUpdated: DateTime.utc(2020, 1, 2, 3, 4, 5),
      name: "test1",
      providerType: "static",
      providerContent: """{"items": []}""",
      coverProviderType: "memory",
      coverProviderContent: _stripJsonString("""{
        "coverFile": {
          "fdPath": "remote.php/dav/files/admin/test1.jpg",
          "fdId": 1,
          "fdMime": null,
          "fdIsArchived": false,
          "fdIsFavorite": false,
          "fdDateTime": "2020-01-02T03:04:05.678901Z"
        }
      }"""),
      sortProviderType: "null",
      sortProviderContent: "{}",
    );
    final src = CompleteAlbum(sqlAlbum, 1, []);
    expect(
      AlbumConverter.fromSql(src),
      DbAlbum(
        fileId: 1,
        fileEtag: "8a3e0799b6f0711c23cc2d93950eceb5",
        version: 8,
        lastUpdated: DateTime.utc(2020, 1, 2, 3, 4, 5),
        name: "test1",
        providerType: "static",
        providerContent: const {"items": []},
        coverProviderType: "memory",
        coverProviderContent: const {
          "coverFile": {
            "fdPath": "remote.php/dav/files/admin/test1.jpg",
            "fdId": 1,
            "fdMime": null,
            "fdIsArchived": false,
            "fdIsFavorite": false,
            "fdDateTime": "2020-01-02T03:04:05.678901Z"
          }
        },
        sortProviderType: "null",
        sortProviderContent: const {},
        shares: const [],
      ),
    );
  }
}

String _stripJsonString(String str) {
  return jsonEncode(jsonDecode(str));
}