{
  "formatVersion": 1,
  "database": {
    "version": 32,
    "identityHash": "7e9582bb9ffc4ecf92bf3cf486687f29",
    "entities": [
      {
        "tableName": "providers",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `type` TEXT NOT NULL, `server_url` TEXT NOT NULL, `username` TEXT NOT NULL, `password` TEXT NOT NULL, `m3u_url` TEXT NOT NULL, `epg_url` TEXT NOT NULL, `is_active` INTEGER NOT NULL, `max_connections` INTEGER NOT NULL, `expiration_date` INTEGER, `api_version` TEXT, `allowed_output_formats_json` TEXT NOT NULL, `epg_sync_mode` TEXT NOT NULL, `xtream_fast_sync_enabled` INTEGER NOT NULL, `m3u_vod_classification_enabled` INTEGER NOT NULL, `status` TEXT NOT NULL, `last_synced_at` INTEGER NOT NULL, `created_at` INTEGER NOT NULL)",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "type",
            "columnName": "type",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "serverUrl",
            "columnName": "server_url",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "username",
            "columnName": "username",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "password",
            "columnName": "password",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "m3uUrl",
            "columnName": "m3u_url",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "epgUrl",
            "columnName": "epg_url",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "isActive",
            "columnName": "is_active",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "maxConnections",
            "columnName": "max_connections",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "expirationDate",
            "columnName": "expiration_date",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "apiVersion",
            "columnName": "api_version",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "allowedOutputFormatsJson",
            "columnName": "allowed_output_formats_json",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "epgSyncMode",
            "columnName": "epg_sync_mode",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "xtreamFastSyncEnabled",
            "columnName": "xtream_fast_sync_enabled",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "m3uVodClassificationEnabled",
            "columnName": "m3u_vod_classification_enabled",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "status",
            "columnName": "status",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "lastSyncedAt",
            "columnName": "last_synced_at",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "createdAt",
            "columnName": "created_at",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_providers_server_url_username",
            "unique": true,
            "columnNames": [
              "server_url",
              "username"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_providers_server_url_username` ON `${TABLE_NAME}` (`server_url`, `username`)"
          }
        ]
      },
      {
        "tableName": "channels",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `stream_id` INTEGER NOT NULL, `name` TEXT NOT NULL, `logo_url` TEXT, `group_title` TEXT, `category_id` INTEGER, `category_name` TEXT, `stream_url` TEXT NOT NULL, `epg_channel_id` TEXT, `number` INTEGER NOT NULL, `catch_up_supported` INTEGER NOT NULL, `catch_up_days` INTEGER NOT NULL, `catchUpSource` TEXT, `provider_id` INTEGER NOT NULL, `is_adult` INTEGER NOT NULL, `is_user_protected` INTEGER NOT NULL, `logical_group_id` TEXT NOT NULL, `error_count` INTEGER NOT NULL, `quality_options_json` TEXT, `sync_fingerprint` TEXT NOT NULL, FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "streamId",
            "columnName": "stream_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "logoUrl",
            "columnName": "logo_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "groupTitle",
            "columnName": "group_title",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "categoryId",
            "columnName": "category_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "categoryName",
            "columnName": "category_name",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "streamUrl",
            "columnName": "stream_url",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "epgChannelId",
            "columnName": "epg_channel_id",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "number",
            "columnName": "number",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "catchUpSupported",
            "columnName": "catch_up_supported",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "catchUpDays",
            "columnName": "catch_up_days",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "catchUpSource",
            "columnName": "catchUpSource",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "isAdult",
            "columnName": "is_adult",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "isUserProtected",
            "columnName": "is_user_protected",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "logicalGroupId",
            "columnName": "logical_group_id",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "errorCount",
            "columnName": "error_count",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "qualityOptionsJson",
            "columnName": "quality_options_json",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "syncFingerprint",
            "columnName": "sync_fingerprint",
            "affinity": "TEXT",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_channels_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_channels_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          },
          {
            "name": "index_channels_provider_id_category_id",
            "unique": false,
            "columnNames": [
              "provider_id",
              "category_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_channels_provider_id_category_id` ON `${TABLE_NAME}` (`provider_id`, `category_id`)"
          },
          {
            "name": "index_channels_provider_id_stream_id",
            "unique": true,
            "columnNames": [
              "provider_id",
              "stream_id"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_channels_provider_id_stream_id` ON `${TABLE_NAME}` (`provider_id`, `stream_id`)"
          },
          {
            "name": "index_channels_logical_group_id",
            "unique": false,
            "columnNames": [
              "logical_group_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_channels_logical_group_id` ON `${TABLE_NAME}` (`logical_group_id`)"
          },
          {
            "name": "index_channels_provider_id_category_id_logical_group_id",
            "unique": false,
            "columnNames": [
              "provider_id",
              "category_id",
              "logical_group_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_channels_provider_id_category_id_logical_group_id` ON `${TABLE_NAME}` (`provider_id`, `category_id`, `logical_group_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "channel_preferences",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `channel_id` INTEGER NOT NULL, `aspect_ratio` TEXT, `updated_at` INTEGER NOT NULL, FOREIGN KEY(`channel_id`) REFERENCES `channels`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "channelId",
            "columnName": "channel_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "aspectRatio",
            "columnName": "aspect_ratio",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "updatedAt",
            "columnName": "updated_at",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_channel_preferences_channel_id",
            "unique": true,
            "columnNames": [
              "channel_id"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_channel_preferences_channel_id` ON `${TABLE_NAME}` (`channel_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "channels",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "channel_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "channels_fts",
        "createSql": "CREATE VIRTUAL TABLE IF NOT EXISTS `${TABLE_NAME}` USING FTS4(`name` TEXT NOT NULL, content=`channels`)",
        "fields": [
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": false,
          "columnNames": []
        },
        "ftsVersion": "FTS4",
        "ftsOptions": {
          "tokenizer": "simple",
          "tokenizerArgs": [],
          "contentTable": "channels",
          "languageIdColumnName": "",
          "matchInfo": "FTS4",
          "notIndexedColumns": [],
          "prefixSizes": [],
          "preferredOrder": "ASC"
        },
        "contentSyncTriggers": [
          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_channels_fts_BEFORE_UPDATE BEFORE UPDATE ON `channels` BEGIN DELETE FROM `channels_fts` WHERE `docid`=OLD.`rowid`; END",
          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_channels_fts_BEFORE_DELETE BEFORE DELETE ON `channels` BEGIN DELETE FROM `channels_fts` WHERE `docid`=OLD.`rowid`; END",
          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_channels_fts_AFTER_UPDATE AFTER UPDATE ON `channels` BEGIN INSERT INTO `channels_fts`(`docid`, `name`) VALUES (NEW.`rowid`, NEW.`name`); END",
          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_channels_fts_AFTER_INSERT AFTER INSERT ON `channels` BEGIN INSERT INTO `channels_fts`(`docid`, `name`) VALUES (NEW.`rowid`, NEW.`name`); END"
        ]
      },
      {
        "tableName": "movies",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `stream_id` INTEGER NOT NULL, `name` TEXT NOT NULL, `poster_url` TEXT, `backdrop_url` TEXT, `category_id` INTEGER, `category_name` TEXT, `stream_url` TEXT NOT NULL, `container_extension` TEXT, `plot` TEXT, `cast` TEXT, `director` TEXT, `genre` TEXT, `release_date` TEXT, `duration` TEXT, `duration_seconds` INTEGER NOT NULL, `rating` REAL NOT NULL, `year` TEXT, `tmdb_id` INTEGER, `youtube_trailer` TEXT, `provider_id` INTEGER NOT NULL, `watch_progress` INTEGER NOT NULL, `last_watched_at` INTEGER NOT NULL, `is_adult` INTEGER NOT NULL, `is_user_protected` INTEGER NOT NULL, `sync_fingerprint` TEXT NOT NULL, `added_at` INTEGER NOT NULL, FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "streamId",
            "columnName": "stream_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "posterUrl",
            "columnName": "poster_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "backdropUrl",
            "columnName": "backdrop_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "categoryId",
            "columnName": "category_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "categoryName",
            "columnName": "category_name",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "streamUrl",
            "columnName": "stream_url",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "containerExtension",
            "columnName": "container_extension",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "plot",
            "columnName": "plot",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "cast",
            "columnName": "cast",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "director",
            "columnName": "director",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "genre",
            "columnName": "genre",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "releaseDate",
            "columnName": "release_date",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "duration",
            "columnName": "duration",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "durationSeconds",
            "columnName": "duration_seconds",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "rating",
            "columnName": "rating",
            "affinity": "REAL",
            "notNull": true
          },
          {
            "fieldPath": "year",
            "columnName": "year",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "tmdbId",
            "columnName": "tmdb_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "youtubeTrailer",
            "columnName": "youtube_trailer",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "watchProgress",
            "columnName": "watch_progress",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastWatchedAt",
            "columnName": "last_watched_at",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "isAdult",
            "columnName": "is_adult",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "isUserProtected",
            "columnName": "is_user_protected",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "syncFingerprint",
            "columnName": "sync_fingerprint",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "addedAt",
            "columnName": "added_at",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_movies_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_movies_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          },
          {
            "name": "index_movies_provider_id_category_id",
            "unique": false,
            "columnNames": [
              "provider_id",
              "category_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_movies_provider_id_category_id` ON `${TABLE_NAME}` (`provider_id`, `category_id`)"
          },
          {
            "name": "index_movies_provider_id_stream_id",
            "unique": true,
            "columnNames": [
              "provider_id",
              "stream_id"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_movies_provider_id_stream_id` ON `${TABLE_NAME}` (`provider_id`, `stream_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "movies_fts",
        "createSql": "CREATE VIRTUAL TABLE IF NOT EXISTS `${TABLE_NAME}` USING FTS4(`name` TEXT NOT NULL, content=`movies`)",
        "fields": [
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": false,
          "columnNames": []
        },
        "ftsVersion": "FTS4",
        "ftsOptions": {
          "tokenizer": "simple",
          "tokenizerArgs": [],
          "contentTable": "movies",
          "languageIdColumnName": "",
          "matchInfo": "FTS4",
          "notIndexedColumns": [],
          "prefixSizes": [],
          "preferredOrder": "ASC"
        },
        "contentSyncTriggers": [
          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_movies_fts_BEFORE_UPDATE BEFORE UPDATE ON `movies` BEGIN DELETE FROM `movies_fts` WHERE `docid`=OLD.`rowid`; END",
          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_movies_fts_BEFORE_DELETE BEFORE DELETE ON `movies` BEGIN DELETE FROM `movies_fts` WHERE `docid`=OLD.`rowid`; END",
          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_movies_fts_AFTER_UPDATE AFTER UPDATE ON `movies` BEGIN INSERT INTO `movies_fts`(`docid`, `name`) VALUES (NEW.`rowid`, NEW.`name`); END",
          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_movies_fts_AFTER_INSERT AFTER INSERT ON `movies` BEGIN INSERT INTO `movies_fts`(`docid`, `name`) VALUES (NEW.`rowid`, NEW.`name`); END"
        ]
      },
      {
        "tableName": "series",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `series_id` INTEGER NOT NULL, `name` TEXT NOT NULL, `poster_url` TEXT, `backdrop_url` TEXT, `category_id` INTEGER, `category_name` TEXT, `plot` TEXT, `cast` TEXT, `director` TEXT, `genre` TEXT, `release_date` TEXT, `rating` REAL NOT NULL, `tmdb_id` INTEGER, `youtube_trailer` TEXT, `episode_run_time` TEXT, `last_modified` INTEGER NOT NULL, `provider_id` INTEGER NOT NULL, `is_adult` INTEGER NOT NULL, `is_user_protected` INTEGER NOT NULL, `sync_fingerprint` TEXT NOT NULL, FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "seriesId",
            "columnName": "series_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "posterUrl",
            "columnName": "poster_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "backdropUrl",
            "columnName": "backdrop_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "categoryId",
            "columnName": "category_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "categoryName",
            "columnName": "category_name",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "plot",
            "columnName": "plot",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "cast",
            "columnName": "cast",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "director",
            "columnName": "director",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "genre",
            "columnName": "genre",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "releaseDate",
            "columnName": "release_date",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "rating",
            "columnName": "rating",
            "affinity": "REAL",
            "notNull": true
          },
          {
            "fieldPath": "tmdbId",
            "columnName": "tmdb_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "youtubeTrailer",
            "columnName": "youtube_trailer",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "episodeRunTime",
            "columnName": "episode_run_time",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "lastModified",
            "columnName": "last_modified",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "isAdult",
            "columnName": "is_adult",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "isUserProtected",
            "columnName": "is_user_protected",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "syncFingerprint",
            "columnName": "sync_fingerprint",
            "affinity": "TEXT",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_series_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_series_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          },
          {
            "name": "index_series_provider_id_category_id",
            "unique": false,
            "columnNames": [
              "provider_id",
              "category_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_series_provider_id_category_id` ON `${TABLE_NAME}` (`provider_id`, `category_id`)"
          },
          {
            "name": "index_series_provider_id_series_id",
            "unique": true,
            "columnNames": [
              "provider_id",
              "series_id"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_series_provider_id_series_id` ON `${TABLE_NAME}` (`provider_id`, `series_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "series_fts",
        "createSql": "CREATE VIRTUAL TABLE IF NOT EXISTS `${TABLE_NAME}` USING FTS4(`name` TEXT NOT NULL, content=`series`)",
        "fields": [
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": false,
          "columnNames": []
        },
        "ftsVersion": "FTS4",
        "ftsOptions": {
          "tokenizer": "simple",
          "tokenizerArgs": [],
          "contentTable": "series",
          "languageIdColumnName": "",
          "matchInfo": "FTS4",
          "notIndexedColumns": [],
          "prefixSizes": [],
          "preferredOrder": "ASC"
        },
        "contentSyncTriggers": [
          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_series_fts_BEFORE_UPDATE BEFORE UPDATE ON `series` BEGIN DELETE FROM `series_fts` WHERE `docid`=OLD.`rowid`; END",
          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_series_fts_BEFORE_DELETE BEFORE DELETE ON `series` BEGIN DELETE FROM `series_fts` WHERE `docid`=OLD.`rowid`; END",
          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_series_fts_AFTER_UPDATE AFTER UPDATE ON `series` BEGIN INSERT INTO `series_fts`(`docid`, `name`) VALUES (NEW.`rowid`, NEW.`name`); END",
          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_series_fts_AFTER_INSERT AFTER INSERT ON `series` BEGIN INSERT INTO `series_fts`(`docid`, `name`) VALUES (NEW.`rowid`, NEW.`name`); END"
        ]
      },
      {
        "tableName": "episodes",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `episode_id` INTEGER NOT NULL, `title` TEXT NOT NULL, `episode_number` INTEGER NOT NULL, `season_number` INTEGER NOT NULL, `stream_url` TEXT NOT NULL, `container_extension` TEXT, `cover_url` TEXT, `plot` TEXT, `duration` TEXT, `duration_seconds` INTEGER NOT NULL, `rating` REAL NOT NULL, `release_date` TEXT, `series_id` INTEGER NOT NULL, `provider_id` INTEGER NOT NULL, `watch_progress` INTEGER NOT NULL, `last_watched_at` INTEGER NOT NULL, `is_adult` INTEGER NOT NULL, `is_user_protected` INTEGER NOT NULL, FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`series_id`) REFERENCES `series`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "episodeId",
            "columnName": "episode_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "title",
            "columnName": "title",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "episodeNumber",
            "columnName": "episode_number",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "seasonNumber",
            "columnName": "season_number",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "streamUrl",
            "columnName": "stream_url",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "containerExtension",
            "columnName": "container_extension",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "coverUrl",
            "columnName": "cover_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "plot",
            "columnName": "plot",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "duration",
            "columnName": "duration",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "durationSeconds",
            "columnName": "duration_seconds",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "rating",
            "columnName": "rating",
            "affinity": "REAL",
            "notNull": true
          },
          {
            "fieldPath": "releaseDate",
            "columnName": "release_date",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "seriesId",
            "columnName": "series_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "watchProgress",
            "columnName": "watch_progress",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastWatchedAt",
            "columnName": "last_watched_at",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "isAdult",
            "columnName": "is_adult",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "isUserProtected",
            "columnName": "is_user_protected",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_episodes_series_id",
            "unique": false,
            "columnNames": [
              "series_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_episodes_series_id` ON `${TABLE_NAME}` (`series_id`)"
          },
          {
            "name": "index_episodes_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_episodes_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          },
          {
            "name": "index_episodes_provider_id_episode_id",
            "unique": true,
            "columnNames": [
              "provider_id",
              "episode_id"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_episodes_provider_id_episode_id` ON `${TABLE_NAME}` (`provider_id`, `episode_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          },
          {
            "table": "series",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "series_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "categories",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `category_id` INTEGER NOT NULL, `name` TEXT NOT NULL, `parent_id` INTEGER, `type` TEXT NOT NULL, `provider_id` INTEGER NOT NULL, `is_adult` INTEGER NOT NULL, `is_user_protected` INTEGER NOT NULL, `sync_fingerprint` TEXT NOT NULL, FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "categoryId",
            "columnName": "category_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "parentId",
            "columnName": "parent_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "type",
            "columnName": "type",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "isAdult",
            "columnName": "is_adult",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "isUserProtected",
            "columnName": "is_user_protected",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "syncFingerprint",
            "columnName": "sync_fingerprint",
            "affinity": "TEXT",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_categories_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_categories_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          },
          {
            "name": "index_categories_provider_id_type",
            "unique": false,
            "columnNames": [
              "provider_id",
              "type"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_categories_provider_id_type` ON `${TABLE_NAME}` (`provider_id`, `type`)"
          },
          {
            "name": "index_categories_provider_id_category_id_type",
            "unique": true,
            "columnNames": [
              "provider_id",
              "category_id",
              "type"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_categories_provider_id_category_id_type` ON `${TABLE_NAME}` (`provider_id`, `category_id`, `type`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "channel_import_stage",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`session_id` INTEGER NOT NULL, `provider_id` INTEGER NOT NULL, `stream_id` INTEGER NOT NULL, `name` TEXT NOT NULL, `logo_url` TEXT, `group_title` TEXT, `category_id` INTEGER, `category_name` TEXT, `stream_url` TEXT NOT NULL, `epg_channel_id` TEXT, `number` INTEGER NOT NULL, `catch_up_supported` INTEGER NOT NULL, `catch_up_days` INTEGER NOT NULL, `catchUpSource` TEXT, `is_adult` INTEGER NOT NULL, `logical_group_id` TEXT NOT NULL, `error_count` INTEGER NOT NULL, `sync_fingerprint` TEXT NOT NULL, PRIMARY KEY(`session_id`, `provider_id`, `stream_id`), FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "sessionId",
            "columnName": "session_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "streamId",
            "columnName": "stream_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "logoUrl",
            "columnName": "logo_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "groupTitle",
            "columnName": "group_title",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "categoryId",
            "columnName": "category_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "categoryName",
            "columnName": "category_name",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "streamUrl",
            "columnName": "stream_url",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "epgChannelId",
            "columnName": "epg_channel_id",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "number",
            "columnName": "number",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "catchUpSupported",
            "columnName": "catch_up_supported",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "catchUpDays",
            "columnName": "catch_up_days",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "catchUpSource",
            "columnName": "catchUpSource",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "isAdult",
            "columnName": "is_adult",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "logicalGroupId",
            "columnName": "logical_group_id",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "errorCount",
            "columnName": "error_count",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "syncFingerprint",
            "columnName": "sync_fingerprint",
            "affinity": "TEXT",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": false,
          "columnNames": [
            "session_id",
            "provider_id",
            "stream_id"
          ]
        },
        "indices": [
          {
            "name": "index_channel_import_stage_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_channel_import_stage_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          },
          {
            "name": "index_channel_import_stage_session_id_provider_id",
            "unique": false,
            "columnNames": [
              "session_id",
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_channel_import_stage_session_id_provider_id` ON `${TABLE_NAME}` (`session_id`, `provider_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "movie_import_stage",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`session_id` INTEGER NOT NULL, `provider_id` INTEGER NOT NULL, `stream_id` INTEGER NOT NULL, `name` TEXT NOT NULL, `poster_url` TEXT, `backdrop_url` TEXT, `category_id` INTEGER, `category_name` TEXT, `stream_url` TEXT NOT NULL, `container_extension` TEXT, `plot` TEXT, `cast` TEXT, `director` TEXT, `genre` TEXT, `release_date` TEXT, `duration` TEXT, `duration_seconds` INTEGER NOT NULL, `rating` REAL NOT NULL, `year` TEXT, `tmdb_id` INTEGER, `youtube_trailer` TEXT, `is_adult` INTEGER NOT NULL, `sync_fingerprint` TEXT NOT NULL, `added_at` INTEGER NOT NULL, PRIMARY KEY(`session_id`, `provider_id`, `stream_id`), FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "sessionId",
            "columnName": "session_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "streamId",
            "columnName": "stream_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "posterUrl",
            "columnName": "poster_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "backdropUrl",
            "columnName": "backdrop_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "categoryId",
            "columnName": "category_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "categoryName",
            "columnName": "category_name",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "streamUrl",
            "columnName": "stream_url",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "containerExtension",
            "columnName": "container_extension",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "plot",
            "columnName": "plot",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "cast",
            "columnName": "cast",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "director",
            "columnName": "director",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "genre",
            "columnName": "genre",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "releaseDate",
            "columnName": "release_date",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "duration",
            "columnName": "duration",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "durationSeconds",
            "columnName": "duration_seconds",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "rating",
            "columnName": "rating",
            "affinity": "REAL",
            "notNull": true
          },
          {
            "fieldPath": "year",
            "columnName": "year",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "tmdbId",
            "columnName": "tmdb_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "youtubeTrailer",
            "columnName": "youtube_trailer",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "isAdult",
            "columnName": "is_adult",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "syncFingerprint",
            "columnName": "sync_fingerprint",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "addedAt",
            "columnName": "added_at",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": false,
          "columnNames": [
            "session_id",
            "provider_id",
            "stream_id"
          ]
        },
        "indices": [
          {
            "name": "index_movie_import_stage_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_movie_import_stage_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          },
          {
            "name": "index_movie_import_stage_session_id_provider_id",
            "unique": false,
            "columnNames": [
              "session_id",
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_movie_import_stage_session_id_provider_id` ON `${TABLE_NAME}` (`session_id`, `provider_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "series_import_stage",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`session_id` INTEGER NOT NULL, `provider_id` INTEGER NOT NULL, `series_id` INTEGER NOT NULL, `name` TEXT NOT NULL, `poster_url` TEXT, `backdrop_url` TEXT, `category_id` INTEGER, `category_name` TEXT, `plot` TEXT, `cast` TEXT, `director` TEXT, `genre` TEXT, `release_date` TEXT, `rating` REAL NOT NULL, `tmdb_id` INTEGER, `youtube_trailer` TEXT, `episode_run_time` TEXT, `last_modified` INTEGER NOT NULL, `is_adult` INTEGER NOT NULL, `sync_fingerprint` TEXT NOT NULL, PRIMARY KEY(`session_id`, `provider_id`, `series_id`), FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "sessionId",
            "columnName": "session_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "seriesId",
            "columnName": "series_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "posterUrl",
            "columnName": "poster_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "backdropUrl",
            "columnName": "backdrop_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "categoryId",
            "columnName": "category_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "categoryName",
            "columnName": "category_name",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "plot",
            "columnName": "plot",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "cast",
            "columnName": "cast",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "director",
            "columnName": "director",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "genre",
            "columnName": "genre",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "releaseDate",
            "columnName": "release_date",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "rating",
            "columnName": "rating",
            "affinity": "REAL",
            "notNull": true
          },
          {
            "fieldPath": "tmdbId",
            "columnName": "tmdb_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "youtubeTrailer",
            "columnName": "youtube_trailer",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "episodeRunTime",
            "columnName": "episode_run_time",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "lastModified",
            "columnName": "last_modified",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "isAdult",
            "columnName": "is_adult",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "syncFingerprint",
            "columnName": "sync_fingerprint",
            "affinity": "TEXT",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": false,
          "columnNames": [
            "session_id",
            "provider_id",
            "series_id"
          ]
        },
        "indices": [
          {
            "name": "index_series_import_stage_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_series_import_stage_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          },
          {
            "name": "index_series_import_stage_session_id_provider_id",
            "unique": false,
            "columnNames": [
              "session_id",
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_series_import_stage_session_id_provider_id` ON `${TABLE_NAME}` (`session_id`, `provider_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "category_import_stage",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`session_id` INTEGER NOT NULL, `provider_id` INTEGER NOT NULL, `category_id` INTEGER NOT NULL, `name` TEXT NOT NULL, `parent_id` INTEGER, `type` TEXT NOT NULL, `is_adult` INTEGER NOT NULL, `sync_fingerprint` TEXT NOT NULL, PRIMARY KEY(`session_id`, `provider_id`, `category_id`, `type`), FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "sessionId",
            "columnName": "session_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "categoryId",
            "columnName": "category_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "parentId",
            "columnName": "parent_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "type",
            "columnName": "type",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "isAdult",
            "columnName": "is_adult",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "syncFingerprint",
            "columnName": "sync_fingerprint",
            "affinity": "TEXT",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": false,
          "columnNames": [
            "session_id",
            "provider_id",
            "category_id",
            "type"
          ]
        },
        "indices": [
          {
            "name": "index_category_import_stage_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_category_import_stage_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          },
          {
            "name": "index_category_import_stage_session_id_provider_id",
            "unique": false,
            "columnNames": [
              "session_id",
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_category_import_stage_session_id_provider_id` ON `${TABLE_NAME}` (`session_id`, `provider_id`)"
          },
          {
            "name": "index_category_import_stage_provider_id_type",
            "unique": false,
            "columnNames": [
              "provider_id",
              "type"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_category_import_stage_provider_id_type` ON `${TABLE_NAME}` (`provider_id`, `type`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "programs",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `provider_id` INTEGER NOT NULL, `channel_id` TEXT NOT NULL, `title` TEXT NOT NULL, `description` TEXT NOT NULL, `start_time` INTEGER NOT NULL, `end_time` INTEGER NOT NULL, `lang` TEXT NOT NULL, `rating` TEXT, `image_url` TEXT, `genre` TEXT, `category` TEXT, `has_archive` INTEGER NOT NULL)",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "channelId",
            "columnName": "channel_id",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "title",
            "columnName": "title",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "description",
            "columnName": "description",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "startTime",
            "columnName": "start_time",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "endTime",
            "columnName": "end_time",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lang",
            "columnName": "lang",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "rating",
            "columnName": "rating",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "imageUrl",
            "columnName": "image_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "genre",
            "columnName": "genre",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "category",
            "columnName": "category",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "hasArchive",
            "columnName": "has_archive",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_programs_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_programs_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          },
          {
            "name": "index_programs_provider_id_channel_id",
            "unique": false,
            "columnNames": [
              "provider_id",
              "channel_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_programs_provider_id_channel_id` ON `${TABLE_NAME}` (`provider_id`, `channel_id`)"
          },
          {
            "name": "index_programs_provider_id_start_time_end_time",
            "unique": false,
            "columnNames": [
              "provider_id",
              "start_time",
              "end_time"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_programs_provider_id_start_time_end_time` ON `${TABLE_NAME}` (`provider_id`, `start_time`, `end_time`)"
          },
          {
            "name": "index_programs_start_time",
            "unique": false,
            "columnNames": [
              "start_time"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_programs_start_time` ON `${TABLE_NAME}` (`start_time`)"
          },
          {
            "name": "index_programs_provider_id_channel_id_start_time",
            "unique": false,
            "columnNames": [
              "provider_id",
              "channel_id",
              "start_time"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_programs_provider_id_channel_id_start_time` ON `${TABLE_NAME}` (`provider_id`, `channel_id`, `start_time`)"
          },
          {
            "name": "index_programs_provider_id_channel_id_start_time_end_time",
            "unique": true,
            "columnNames": [
              "provider_id",
              "channel_id",
              "start_time",
              "end_time"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_programs_provider_id_channel_id_start_time_end_time` ON `${TABLE_NAME}` (`provider_id`, `channel_id`, `start_time`, `end_time`)"
          }
        ]
      },
      {
        "tableName": "favorites",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `provider_id` INTEGER NOT NULL, `content_id` INTEGER NOT NULL, `content_type` TEXT NOT NULL, `position` INTEGER NOT NULL, `group_id` INTEGER, `added_at` INTEGER NOT NULL, FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`group_id`) REFERENCES `virtual_groups`(`id`) ON UPDATE NO ACTION ON DELETE SET NULL )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "contentId",
            "columnName": "content_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "contentType",
            "columnName": "content_type",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "position",
            "columnName": "position",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "groupId",
            "columnName": "group_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "addedAt",
            "columnName": "added_at",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_favorites_provider_id_content_id_content_type_group_id",
            "unique": true,
            "columnNames": [
              "provider_id",
              "content_id",
              "content_type",
              "group_id"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_favorites_provider_id_content_id_content_type_group_id` ON `${TABLE_NAME}` (`provider_id`, `content_id`, `content_type`, `group_id`)"
          },
          {
            "name": "index_favorites_provider_id_content_type_group_id",
            "unique": false,
            "columnNames": [
              "provider_id",
              "content_type",
              "group_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_favorites_provider_id_content_type_group_id` ON `${TABLE_NAME}` (`provider_id`, `content_type`, `group_id`)"
          },
          {
            "name": "index_favorites_group_id_position",
            "unique": false,
            "columnNames": [
              "group_id",
              "position"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_favorites_group_id_position` ON `${TABLE_NAME}` (`group_id`, `position`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          },
          {
            "table": "virtual_groups",
            "onDelete": "SET NULL",
            "onUpdate": "NO ACTION",
            "columns": [
              "group_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "virtual_groups",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `provider_id` INTEGER NOT NULL, `name` TEXT NOT NULL, `icon_emoji` TEXT, `position` INTEGER NOT NULL, `created_at` INTEGER NOT NULL, `content_type` TEXT NOT NULL, FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "iconEmoji",
            "columnName": "icon_emoji",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "position",
            "columnName": "position",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "createdAt",
            "columnName": "created_at",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "contentType",
            "columnName": "content_type",
            "affinity": "TEXT",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_virtual_groups_provider_id_content_type",
            "unique": false,
            "columnNames": [
              "provider_id",
              "content_type"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_virtual_groups_provider_id_content_type` ON `${TABLE_NAME}` (`provider_id`, `content_type`)"
          },
          {
            "name": "index_virtual_groups_position",
            "unique": false,
            "columnNames": [
              "position"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_virtual_groups_position` ON `${TABLE_NAME}` (`position`)"
          },
          {
            "name": "index_virtual_groups_content_type",
            "unique": false,
            "columnNames": [
              "content_type"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_virtual_groups_content_type` ON `${TABLE_NAME}` (`content_type`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "playback_history",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `content_id` INTEGER NOT NULL, `content_type` TEXT NOT NULL, `provider_id` INTEGER NOT NULL, `title` TEXT NOT NULL, `poster_url` TEXT, `stream_url` TEXT NOT NULL, `resume_position_ms` INTEGER NOT NULL, `total_duration_ms` INTEGER NOT NULL, `last_watched_at` INTEGER NOT NULL, `watch_count` INTEGER NOT NULL, `watched_status` TEXT NOT NULL, `series_id` INTEGER, `season_number` INTEGER, `episode_number` INTEGER, FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "contentId",
            "columnName": "content_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "contentType",
            "columnName": "content_type",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "title",
            "columnName": "title",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "posterUrl",
            "columnName": "poster_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "streamUrl",
            "columnName": "stream_url",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "resumePositionMs",
            "columnName": "resume_position_ms",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "totalDurationMs",
            "columnName": "total_duration_ms",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastWatchedAt",
            "columnName": "last_watched_at",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "watchCount",
            "columnName": "watch_count",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "watchedStatus",
            "columnName": "watched_status",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "seriesId",
            "columnName": "series_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "seasonNumber",
            "columnName": "season_number",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "episodeNumber",
            "columnName": "episode_number",
            "affinity": "INTEGER"
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_playback_history_content_id_content_type_provider_id",
            "unique": true,
            "columnNames": [
              "content_id",
              "content_type",
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_playback_history_content_id_content_type_provider_id` ON `${TABLE_NAME}` (`content_id`, `content_type`, `provider_id`)"
          },
          {
            "name": "index_playback_history_last_watched_at",
            "unique": false,
            "columnNames": [
              "last_watched_at"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_playback_history_last_watched_at` ON `${TABLE_NAME}` (`last_watched_at`)"
          },
          {
            "name": "index_playback_history_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_playback_history_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "sync_metadata",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`provider_id` INTEGER NOT NULL, `last_live_sync` INTEGER NOT NULL, `last_movie_sync` INTEGER NOT NULL, `last_series_sync` INTEGER NOT NULL, `last_epg_sync` INTEGER NOT NULL, `last_movie_attempt` INTEGER NOT NULL, `last_movie_success` INTEGER NOT NULL, `last_movie_partial` INTEGER NOT NULL, `live_count` INTEGER NOT NULL, `movie_count` INTEGER NOT NULL, `series_count` INTEGER NOT NULL, `epg_count` INTEGER NOT NULL, `last_sync_status` TEXT NOT NULL, `movie_sync_mode` TEXT NOT NULL, `movie_warnings_count` INTEGER NOT NULL, `movie_catalog_stale` INTEGER NOT NULL, `live_avoid_full_until` INTEGER NOT NULL, `movie_avoid_full_until` INTEGER NOT NULL, `series_avoid_full_until` INTEGER NOT NULL, `live_sequential_failures_remembered` INTEGER NOT NULL, `live_healthy_sync_streak` INTEGER NOT NULL, `movie_parallel_failures_remembered` INTEGER NOT NULL, `movie_healthy_sync_streak` INTEGER NOT NULL, `series_sequential_failures_remembered` INTEGER NOT NULL, `series_healthy_sync_streak` INTEGER NOT NULL, PRIMARY KEY(`provider_id`), FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastLiveSync",
            "columnName": "last_live_sync",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastMovieSync",
            "columnName": "last_movie_sync",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastSeriesSync",
            "columnName": "last_series_sync",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastEpgSync",
            "columnName": "last_epg_sync",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastMovieAttempt",
            "columnName": "last_movie_attempt",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastMovieSuccess",
            "columnName": "last_movie_success",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastMoviePartial",
            "columnName": "last_movie_partial",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "liveCount",
            "columnName": "live_count",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "movieCount",
            "columnName": "movie_count",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "seriesCount",
            "columnName": "series_count",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "epgCount",
            "columnName": "epg_count",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastSyncStatus",
            "columnName": "last_sync_status",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "movieSyncMode",
            "columnName": "movie_sync_mode",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "movieWarningsCount",
            "columnName": "movie_warnings_count",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "movieCatalogStale",
            "columnName": "movie_catalog_stale",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "liveAvoidFullUntil",
            "columnName": "live_avoid_full_until",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "movieAvoidFullUntil",
            "columnName": "movie_avoid_full_until",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "seriesAvoidFullUntil",
            "columnName": "series_avoid_full_until",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "liveSequentialFailuresRemembered",
            "columnName": "live_sequential_failures_remembered",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "liveHealthySyncStreak",
            "columnName": "live_healthy_sync_streak",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "movieParallelFailuresRemembered",
            "columnName": "movie_parallel_failures_remembered",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "movieHealthySyncStreak",
            "columnName": "movie_healthy_sync_streak",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "seriesSequentialFailuresRemembered",
            "columnName": "series_sequential_failures_remembered",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "seriesHealthySyncStreak",
            "columnName": "series_healthy_sync_streak",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": false,
          "columnNames": [
            "provider_id"
          ]
        },
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "movie_category_hydration",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`provider_id` INTEGER NOT NULL, `category_id` INTEGER NOT NULL, `last_hydrated_at` INTEGER NOT NULL, `item_count` INTEGER NOT NULL, `last_status` TEXT NOT NULL, `last_error` TEXT, PRIMARY KEY(`provider_id`, `category_id`), FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "categoryId",
            "columnName": "category_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastHydratedAt",
            "columnName": "last_hydrated_at",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "itemCount",
            "columnName": "item_count",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastStatus",
            "columnName": "last_status",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "lastError",
            "columnName": "last_error",
            "affinity": "TEXT"
          }
        ],
        "primaryKey": {
          "autoGenerate": false,
          "columnNames": [
            "provider_id",
            "category_id"
          ]
        },
        "indices": [
          {
            "name": "index_movie_category_hydration_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_movie_category_hydration_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "series_category_hydration",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`provider_id` INTEGER NOT NULL, `category_id` INTEGER NOT NULL, `last_hydrated_at` INTEGER NOT NULL, `item_count` INTEGER NOT NULL, `last_status` TEXT NOT NULL, `last_error` TEXT, PRIMARY KEY(`provider_id`, `category_id`), FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "categoryId",
            "columnName": "category_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastHydratedAt",
            "columnName": "last_hydrated_at",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "itemCount",
            "columnName": "item_count",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastStatus",
            "columnName": "last_status",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "lastError",
            "columnName": "last_error",
            "affinity": "TEXT"
          }
        ],
        "primaryKey": {
          "autoGenerate": false,
          "columnNames": [
            "provider_id",
            "category_id"
          ]
        },
        "indices": [
          {
            "name": "index_series_category_hydration_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_series_category_hydration_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "epg_sources",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `url` TEXT NOT NULL, `enabled` INTEGER NOT NULL, `last_refresh_at` INTEGER NOT NULL, `last_success_at` INTEGER NOT NULL, `last_error` TEXT, `priority` INTEGER NOT NULL, `created_at` INTEGER NOT NULL, `updated_at` INTEGER NOT NULL)",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "url",
            "columnName": "url",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "enabled",
            "columnName": "enabled",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastRefreshAt",
            "columnName": "last_refresh_at",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastSuccessAt",
            "columnName": "last_success_at",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastError",
            "columnName": "last_error",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "priority",
            "columnName": "priority",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "createdAt",
            "columnName": "created_at",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "updatedAt",
            "columnName": "updated_at",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_epg_sources_url",
            "unique": true,
            "columnNames": [
              "url"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_epg_sources_url` ON `${TABLE_NAME}` (`url`)"
          }
        ]
      },
      {
        "tableName": "provider_epg_sources",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `provider_id` INTEGER NOT NULL, `epg_source_id` INTEGER NOT NULL, `priority` INTEGER NOT NULL, `enabled` INTEGER NOT NULL, FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`epg_source_id`) REFERENCES `epg_sources`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "epgSourceId",
            "columnName": "epg_source_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "priority",
            "columnName": "priority",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "enabled",
            "columnName": "enabled",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_provider_epg_sources_provider_id_epg_source_id",
            "unique": true,
            "columnNames": [
              "provider_id",
              "epg_source_id"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_provider_epg_sources_provider_id_epg_source_id` ON `${TABLE_NAME}` (`provider_id`, `epg_source_id`)"
          },
          {
            "name": "index_provider_epg_sources_epg_source_id",
            "unique": false,
            "columnNames": [
              "epg_source_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_provider_epg_sources_epg_source_id` ON `${TABLE_NAME}` (`epg_source_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          },
          {
            "table": "epg_sources",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "epg_source_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "epg_channels",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `epg_source_id` INTEGER NOT NULL, `xmltv_channel_id` TEXT NOT NULL, `display_name` TEXT NOT NULL, `normalized_name` TEXT NOT NULL, `icon_url` TEXT, FOREIGN KEY(`epg_source_id`) REFERENCES `epg_sources`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "epgSourceId",
            "columnName": "epg_source_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "xmltvChannelId",
            "columnName": "xmltv_channel_id",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "displayName",
            "columnName": "display_name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "normalizedName",
            "columnName": "normalized_name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "iconUrl",
            "columnName": "icon_url",
            "affinity": "TEXT"
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_epg_channels_epg_source_id_xmltv_channel_id",
            "unique": true,
            "columnNames": [
              "epg_source_id",
              "xmltv_channel_id"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_epg_channels_epg_source_id_xmltv_channel_id` ON `${TABLE_NAME}` (`epg_source_id`, `xmltv_channel_id`)"
          },
          {
            "name": "index_epg_channels_epg_source_id",
            "unique": false,
            "columnNames": [
              "epg_source_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_epg_channels_epg_source_id` ON `${TABLE_NAME}` (`epg_source_id`)"
          },
          {
            "name": "index_epg_channels_normalized_name",
            "unique": false,
            "columnNames": [
              "normalized_name"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_epg_channels_normalized_name` ON `${TABLE_NAME}` (`normalized_name`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "epg_sources",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "epg_source_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "epg_programmes",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `epg_source_id` INTEGER NOT NULL, `xmltv_channel_id` TEXT NOT NULL, `start_time` INTEGER NOT NULL, `end_time` INTEGER NOT NULL, `title` TEXT NOT NULL, `subtitle` TEXT, `description` TEXT NOT NULL, `category` TEXT, `lang` TEXT NOT NULL, `rating` TEXT, `image_url` TEXT, `episode_info` TEXT, FOREIGN KEY(`epg_source_id`) REFERENCES `epg_sources`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "epgSourceId",
            "columnName": "epg_source_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "xmltvChannelId",
            "columnName": "xmltv_channel_id",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "startTime",
            "columnName": "start_time",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "endTime",
            "columnName": "end_time",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "title",
            "columnName": "title",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "subtitle",
            "columnName": "subtitle",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "description",
            "columnName": "description",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "category",
            "columnName": "category",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "lang",
            "columnName": "lang",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "rating",
            "columnName": "rating",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "imageUrl",
            "columnName": "image_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "episodeInfo",
            "columnName": "episode_info",
            "affinity": "TEXT"
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_epg_programmes_epg_source_id_xmltv_channel_id_start_time",
            "unique": false,
            "columnNames": [
              "epg_source_id",
              "xmltv_channel_id",
              "start_time"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_epg_programmes_epg_source_id_xmltv_channel_id_start_time` ON `${TABLE_NAME}` (`epg_source_id`, `xmltv_channel_id`, `start_time`)"
          },
          {
            "name": "index_epg_programmes_epg_source_id_xmltv_channel_id_start_time_end_time",
            "unique": true,
            "columnNames": [
              "epg_source_id",
              "xmltv_channel_id",
              "start_time",
              "end_time"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_epg_programmes_epg_source_id_xmltv_channel_id_start_time_end_time` ON `${TABLE_NAME}` (`epg_source_id`, `xmltv_channel_id`, `start_time`, `end_time`)"
          },
          {
            "name": "index_epg_programmes_epg_source_id",
            "unique": false,
            "columnNames": [
              "epg_source_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_epg_programmes_epg_source_id` ON `${TABLE_NAME}` (`epg_source_id`)"
          },
          {
            "name": "index_epg_programmes_start_time",
            "unique": false,
            "columnNames": [
              "start_time"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_epg_programmes_start_time` ON `${TABLE_NAME}` (`start_time`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "epg_sources",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "epg_source_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "channel_epg_mappings",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `provider_channel_id` INTEGER NOT NULL, `provider_id` INTEGER NOT NULL, `source_type` TEXT NOT NULL, `epg_source_id` INTEGER, `xmltv_channel_id` TEXT, `match_type` TEXT, `confidence` REAL NOT NULL, `is_manual_override` INTEGER NOT NULL, `updated_at` INTEGER NOT NULL, FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerChannelId",
            "columnName": "provider_channel_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "sourceType",
            "columnName": "source_type",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "epgSourceId",
            "columnName": "epg_source_id",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "xmltvChannelId",
            "columnName": "xmltv_channel_id",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "matchType",
            "columnName": "match_type",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "confidence",
            "columnName": "confidence",
            "affinity": "REAL",
            "notNull": true
          },
          {
            "fieldPath": "isManualOverride",
            "columnName": "is_manual_override",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "updatedAt",
            "columnName": "updated_at",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_channel_epg_mappings_provider_id_provider_channel_id",
            "unique": true,
            "columnNames": [
              "provider_id",
              "provider_channel_id"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_channel_epg_mappings_provider_id_provider_channel_id` ON `${TABLE_NAME}` (`provider_id`, `provider_channel_id`)"
          },
          {
            "name": "index_channel_epg_mappings_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_channel_epg_mappings_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "combined_m3u_profiles",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `enabled` INTEGER NOT NULL, `created_at` INTEGER NOT NULL, `updated_at` INTEGER NOT NULL)",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "name",
            "columnName": "name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "enabled",
            "columnName": "enabled",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "createdAt",
            "columnName": "created_at",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "updatedAt",
            "columnName": "updated_at",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        }
      },
      {
        "tableName": "combined_m3u_profile_members",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `profile_id` INTEGER NOT NULL, `provider_id` INTEGER NOT NULL, `priority` INTEGER NOT NULL, `enabled` INTEGER NOT NULL, FOREIGN KEY(`profile_id`) REFERENCES `combined_m3u_profiles`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "profileId",
            "columnName": "profile_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "priority",
            "columnName": "priority",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "enabled",
            "columnName": "enabled",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_combined_m3u_profile_members_profile_id",
            "unique": false,
            "columnNames": [
              "profile_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_combined_m3u_profile_members_profile_id` ON `${TABLE_NAME}` (`profile_id`)"
          },
          {
            "name": "index_combined_m3u_profile_members_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_combined_m3u_profile_members_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          },
          {
            "name": "index_combined_m3u_profile_members_profile_id_provider_id",
            "unique": true,
            "columnNames": [
              "profile_id",
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_combined_m3u_profile_members_profile_id_provider_id` ON `${TABLE_NAME}` (`profile_id`, `provider_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "combined_m3u_profiles",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "profile_id"
            ],
            "referencedColumns": [
              "id"
            ]
          },
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "recording_schedules",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `provider_id` INTEGER NOT NULL, `channel_id` INTEGER NOT NULL, `channel_name` TEXT NOT NULL, `stream_url` TEXT NOT NULL, `program_title` TEXT, `requested_start_ms` INTEGER NOT NULL, `requested_end_ms` INTEGER NOT NULL, `recurrence` TEXT NOT NULL, `recurring_rule_id` TEXT, `enabled` INTEGER NOT NULL, `is_manual` INTEGER NOT NULL, `priority` INTEGER NOT NULL, `created_at` INTEGER NOT NULL, `updated_at` INTEGER NOT NULL, FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "channelId",
            "columnName": "channel_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "channelName",
            "columnName": "channel_name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "streamUrl",
            "columnName": "stream_url",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "programTitle",
            "columnName": "program_title",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "requestedStartMs",
            "columnName": "requested_start_ms",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "requestedEndMs",
            "columnName": "requested_end_ms",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "recurrence",
            "columnName": "recurrence",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "recurringRuleId",
            "columnName": "recurring_rule_id",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "enabled",
            "columnName": "enabled",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "isManual",
            "columnName": "is_manual",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "priority",
            "columnName": "priority",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "createdAt",
            "columnName": "created_at",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "updatedAt",
            "columnName": "updated_at",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_recording_schedules_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_recording_schedules_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          },
          {
            "name": "index_recording_schedules_enabled_requested_start_ms",
            "unique": false,
            "columnNames": [
              "enabled",
              "requested_start_ms"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_recording_schedules_enabled_requested_start_ms` ON `${TABLE_NAME}` (`enabled`, `requested_start_ms`)"
          },
          {
            "name": "index_recording_schedules_recurring_rule_id",
            "unique": false,
            "columnNames": [
              "recurring_rule_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_recording_schedules_recurring_rule_id` ON `${TABLE_NAME}` (`recurring_rule_id`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "recording_runs",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `schedule_id` INTEGER NOT NULL, `provider_id` INTEGER NOT NULL, `channel_id` INTEGER NOT NULL, `channel_name` TEXT NOT NULL, `stream_url` TEXT NOT NULL, `program_title` TEXT, `scheduled_start_ms` INTEGER NOT NULL, `scheduled_end_ms` INTEGER NOT NULL, `recurrence` TEXT NOT NULL, `recurring_rule_id` TEXT, `status` TEXT NOT NULL, `source_type` TEXT NOT NULL, `resolved_url` TEXT, `headers_json` TEXT NOT NULL, `user_agent` TEXT, `expiration_time` INTEGER, `provider_label` TEXT, `output_uri` TEXT, `output_display_path` TEXT, `bytes_written` INTEGER NOT NULL, `average_throughput_bps` INTEGER NOT NULL, `retry_count` INTEGER NOT NULL, `last_progress_at_ms` INTEGER, `failure_category` TEXT NOT NULL, `failure_reason` TEXT, `terminal_at_ms` INTEGER, `started_at_ms` INTEGER, `ended_at_ms` INTEGER, `schedule_enabled` INTEGER NOT NULL, `priority` INTEGER NOT NULL, `alarm_start_at_ms` INTEGER, `alarm_stop_at_ms` INTEGER, `created_at` INTEGER NOT NULL, `updated_at` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`schedule_id`) REFERENCES `recording_schedules`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`provider_id`) REFERENCES `providers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "scheduleId",
            "columnName": "schedule_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "providerId",
            "columnName": "provider_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "channelId",
            "columnName": "channel_id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "channelName",
            "columnName": "channel_name",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "streamUrl",
            "columnName": "stream_url",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "programTitle",
            "columnName": "program_title",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "scheduledStartMs",
            "columnName": "scheduled_start_ms",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "scheduledEndMs",
            "columnName": "scheduled_end_ms",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "recurrence",
            "columnName": "recurrence",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "recurringRuleId",
            "columnName": "recurring_rule_id",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "status",
            "columnName": "status",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "sourceType",
            "columnName": "source_type",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "resolvedUrl",
            "columnName": "resolved_url",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "headersJson",
            "columnName": "headers_json",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "userAgent",
            "columnName": "user_agent",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "expirationTime",
            "columnName": "expiration_time",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "providerLabel",
            "columnName": "provider_label",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "outputUri",
            "columnName": "output_uri",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "outputDisplayPath",
            "columnName": "output_display_path",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "bytesWritten",
            "columnName": "bytes_written",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "averageThroughputBytesPerSecond",
            "columnName": "average_throughput_bps",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "retryCount",
            "columnName": "retry_count",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "lastProgressAtMs",
            "columnName": "last_progress_at_ms",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "failureCategory",
            "columnName": "failure_category",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "failureReason",
            "columnName": "failure_reason",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "terminalAtMs",
            "columnName": "terminal_at_ms",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "startedAtMs",
            "columnName": "started_at_ms",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "endedAtMs",
            "columnName": "ended_at_ms",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "scheduleEnabled",
            "columnName": "schedule_enabled",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "priority",
            "columnName": "priority",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "alarmStartAtMs",
            "columnName": "alarm_start_at_ms",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "alarmStopAtMs",
            "columnName": "alarm_stop_at_ms",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "createdAt",
            "columnName": "created_at",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "updatedAt",
            "columnName": "updated_at",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": false,
          "columnNames": [
            "id"
          ]
        },
        "indices": [
          {
            "name": "index_recording_runs_schedule_id",
            "unique": false,
            "columnNames": [
              "schedule_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_recording_runs_schedule_id` ON `${TABLE_NAME}` (`schedule_id`)"
          },
          {
            "name": "index_recording_runs_provider_id",
            "unique": false,
            "columnNames": [
              "provider_id"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_recording_runs_provider_id` ON `${TABLE_NAME}` (`provider_id`)"
          },
          {
            "name": "index_recording_runs_status_scheduled_start_ms",
            "unique": false,
            "columnNames": [
              "status",
              "scheduled_start_ms"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_recording_runs_status_scheduled_start_ms` ON `${TABLE_NAME}` (`status`, `scheduled_start_ms`)"
          },
          {
            "name": "index_recording_runs_alarm_start_at_ms",
            "unique": false,
            "columnNames": [
              "alarm_start_at_ms"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_recording_runs_alarm_start_at_ms` ON `${TABLE_NAME}` (`alarm_start_at_ms`)"
          },
          {
            "name": "index_recording_runs_alarm_stop_at_ms",
            "unique": false,
            "columnNames": [
              "alarm_stop_at_ms"
            ],
            "orders": [],
            "createSql": "CREATE INDEX IF NOT EXISTS `index_recording_runs_alarm_stop_at_ms` ON `${TABLE_NAME}` (`alarm_stop_at_ms`)"
          }
        ],
        "foreignKeys": [
          {
            "table": "recording_schedules",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "schedule_id"
            ],
            "referencedColumns": [
              "id"
            ]
          },
          {
            "table": "providers",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "provider_id"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      },
      {
        "tableName": "recording_storage",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `tree_uri` TEXT, `display_name` TEXT, `output_directory` TEXT, `available_bytes` INTEGER, `is_writable` INTEGER NOT NULL, `file_name_pattern` TEXT NOT NULL, `retention_days` INTEGER, `max_simultaneous_recordings` INTEGER NOT NULL, `updated_at` INTEGER NOT NULL, PRIMARY KEY(`id`))",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "treeUri",
            "columnName": "tree_uri",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "displayName",
            "columnName": "display_name",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "outputDirectory",
            "columnName": "output_directory",
            "affinity": "TEXT"
          },
          {
            "fieldPath": "availableBytes",
            "columnName": "available_bytes",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "isWritable",
            "columnName": "is_writable",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "fileNamePattern",
            "columnName": "file_name_pattern",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "retentionDays",
            "columnName": "retention_days",
            "affinity": "INTEGER"
          },
          {
            "fieldPath": "maxSimultaneousRecordings",
            "columnName": "max_simultaneous_recordings",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "updatedAt",
            "columnName": "updated_at",
            "affinity": "INTEGER",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": false,
          "columnNames": [
            "id"
          ]
        }
      }
    ],
    "setupQueries": [
      "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
      "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '7e9582bb9ffc4ecf92bf3cf486687f29')"
    ]
  }
}