import { readFileSync } from "fs";
import { AppDataSource, appDataSourceReady } from "./data_source.js";
import { Feed } from "./models/Feed.js";
import { Post } from "./models/Post.js";
import { User } from "./models/User.js";



interface IOld {
   feeds: {
      url: string;
      oldEntries: string[];
      subscriber: number[];
   }[];
}


appDataSourceReady.then(async () => {
   let old = JSON.parse(readFileSync("./old.json", "utf-8")) as IOld;

   for (let feed of old.feeds) {
      let f = await AppDataSource.manager.findOne(Feed, {
         where: {
            url: feed.url
         }
      })

      if (!f) {
         f = AppDataSource.manager.create(Feed, {
            url: feed.url,
            lastCheck: new Date(0),
            oldEntries: [],
            subscriber: [],
         })

         await AppDataSource.manager.save(f);
      }

      for (let oldEntry of feed.oldEntries) {
         let existing = await AppDataSource.manager.findOne(Post, {
            where: {
               feed: f,
               hash: oldEntry
            }
         })
         if (!existing) {

            let post = AppDataSource.manager.create(Post, {
               feed: f,
               hash: oldEntry
            })

            await AppDataSource.manager.save(post);
         }
      }

      for (let subscriber of feed.subscriber) {
         let user = await AppDataSource.manager.findOne(User, {
            where: {
               chatid: subscriber
            },
            relations: {
               feeds: true
            }
         });

         if (!user) {
            user = AppDataSource.manager.create(User, {
               chatid: subscriber,
               feeds: [f],
            })
         } else {
            user.feeds.push(f)
         }
         await AppDataSource.manager.save(user);
      }
   }
})