using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using MongoDB.Bson;
using MongoDB.Driver;

// https://docs.mongodb.com/drivers/csharp/
// https://mongodb.github.io/mongo-csharp-driver/2.13/getting_started/quick_tour/
// https://cloud.mongodb.com/v2/6142bf8600516e180d5ff4b5#clusters

// Uses AWS cloud with NoSQL MongoDB storage (Atlas)
// Sample to add db/document with object data and delete data
// Display collections before/after insert/delete

namespace TopNugetPackages
{
    public class MongoData
    {
        public string name { get; set; }
        public string type { get; set; }
        public int count { get; set; }
    }

    public class MongoDB : ITopNugetPackages
    {
        private IMongoCollection<BsonDocument> collec;
        private readonly string connStr = "mongodb+srv://timhsu:abcd@cluster0.najcl.mongodb.net/myFirstDatabase?retryWrites=true&w=majority";

        public void DoIt()
        {
            var client = new MongoClient(connStr);

            var db = client.GetDatabase("myFirstDatabase");

            collec = db.GetCollection<BsonDocument>("config");

            //var document = new BsonDocument
            //{
            //    { "name", "Street Fighter" },
            //    { "type", "Game" },
            //    { "count", 2 },
            //    { "info", new BsonDocument
            //        {
            //            { "x", 20 },
            //            { "y", 12 }
            //        }}
            //};

            var mongoData = new MongoData { name = "Tim", type = "DB", count = 3 };
            var document = mongoData.ToBsonDocument();

            collec.InsertOne(document);

            DisplayAll();

            // now delete and display again
            var filter = Builders<BsonDocument>.Filter.Eq("count", 3);
            collec.DeleteMany(filter);

            DisplayAll();
        }

        private void DisplayAll()
        {
            var doclist = collec.Find(new BsonDocument()).ToList();

            foreach (var doc in doclist)
            {
                Console.WriteLine(doc.ToString());
            }
            Console.WriteLine();
        }
    }
}