public static void FixShoppingMallCarparkRates(ParkingContext context)
        {
            FetchPublicAPI publicAPI = new FetchPublicAPI();

            var task = Task.Run(async() => await publicAPI.GetShoppingMallAsync());

            var result = task.Result;

            var x = "";

            foreach (var v in result)
            {
                var h = context.Carparks.FirstOrDefault(a => a.CarparkName == v.carpark);

                if (h != null)
                {
                    x += $"Weekdays Rate: {v.weekdays_rate_1}, {v.weekdays_rate_2}, Saturday Rate: {v.saturday_rate}, Sunday / Public Holiday Rate: {v.sunday_publicholiday_rate}";

                    CarparkRate carparkRate = new CarparkRate
                    {
                        Id = Guid.NewGuid(),
                        // CarparkId = h.Id,
                        Remarks = x
                    };

                    context.CarparkRates.Add(carparkRate);
                }

                x = "";
            }

            context.SaveChanges();
        }
        public static void fixURACarparkData3(ParkingContext context)
        {
            FetchPublicAPI publicAPI = new FetchPublicAPI();

            var carparks = new List <Carpark>();

            // URA Carpark Info
            var task = Task.Run(async() => await publicAPI.GetURAParkingInfoAsync());

            var URACarparkInfo = task.Result;

            var carparkNo   = "";
            var carparkType = "";

            foreach (var r in URACarparkInfo)
            {
                var v = context.Carparks.FirstOrDefault(a => a.CarparkId.Equals(r.ppCode));

                if (v != null)
                {
                    if (r.vehCat == "Car")
                    {
                        if (!v.LotType.Contains("C"))
                        {
                            v.LotType    += "C, ";
                            v.CarCapacity = r.parkCapacity;
                        }
                    }
                    else if (r.vehCat == "Motorcycle")
                    {
                        if (!v.LotType.Contains("M"))
                        {
                            v.LotType  += "M, ";
                            v.MCapacity = r.parkCapacity;
                        }
                    }
                    else if (r.vehCat == "Heavy Vehicle")
                    {
                        if (!v.LotType.Contains("H"))
                        {
                            v.LotType   += "H, ";
                            v.HVCapacity = r.parkCapacity;
                        }
                    }

                    v.TotalLots = v.CarCapacity + v.MCapacity + v.HVCapacity;

                    context.Carparks.Update(v);
                    context.SaveChanges();
                }

                carparkNo   = r.ppCode;
                carparkType = r.vehCat;
            }
        }
        public static List <Carpark> fixURACarparkData()
        {
            FetchPublicAPI publicAPI = new FetchPublicAPI();

            var carparks = new List <Carpark>();

            // URA Carpark Info
            var task = Task.Run(async() => await publicAPI.GetURAParkingInfoAsync());

            var URACarparkInfo = task.Result;

            var carparkNo = "";

            foreach (var r in URACarparkInfo)
            {
                if (carparkNo != r.ppCode)
                {
                    double xcoord = 0.00, ycoord = 0.00;

                    if (r.geometries != null)
                    {
                        var uncooord = r.geometries[0].coordinates.Split(",");
                        var x        = uncooord[0];
                        var y        = uncooord[1];

                        Svy21Coordinate svy21 = new Svy21Coordinate(double.Parse(x), double.Parse(y));

                        LatLongCoordinate latLong = svy21.ToLatLongCoordinate();

                        xcoord = latLong.Latitude;
                        ycoord = latLong.Longitude;
                    }

                    Carpark carpark = new Carpark()
                    {
                        Id            = Guid.NewGuid(),
                        CarparkId     = r.ppCode,
                        CarparkName   = r.ppName,
                        Address       = r.ppName,
                        AgencyType    = "URA",
                        IsCentral     = false,
                        XCoord        = xcoord.ToString(),
                        YCoord        = ycoord.ToString(),
                        ParkingSystem = "",
                        LotType       = ""
                    };

                    carparks.Add(carpark);
                }

                carparkNo = r.ppCode;
            }

            return(carparks);
        }
        public static void fixURACarparkData4(ParkingContext context)
        {
            FetchPublicAPI publicAPI = new FetchPublicAPI();

            var carparks = new List <Carpark>();

            // URA Carpark Info
            var task = Task.Run(async() => await publicAPI.GetURAParkingInfoAsync());

            var URACarparkInfo = task.Result;

            var carparkNo = "";

            foreach (var r in URACarparkInfo)
            {
                if (carparkNo != r.ppCode)
                {
                    var v = context.Carparks.FirstOrDefault(a => a.CarparkId.Equals(r.ppCode));

                    if (v != null)
                    {
                        double xcoord = 0.00, ycoord = 0.00;

                        if (r.geometries != null)
                        {
                            var uncooord = r.geometries[0].coordinates.Split(",");
                            var x        = float.Parse(uncooord[0]);
                            var y        = float.Parse(uncooord[1]);

                            var task2 = Task.Run(async() => await publicAPI.GetCoordinates(x, y));

                            var coordinates = task2.Result;

                            xcoord = coordinates.latitude;
                            ycoord = coordinates.longitude;
                            // Svy21Coordinate svy21 = new Svy21Coordinate(double.Parse(x), double.Parse(y));

                            // LatLongCoordinate latLong = svy21.ToLatLongCoordinate();

                            // xcoord = latLong.Latitude;
                            // ycoord = latLong.Longitude;

                            v.XCoord = xcoord.ToString();
                            v.YCoord = ycoord.ToString();

                            context.Carparks.Update(v);
                            context.SaveChanges();
                        }
                    }
                }

                carparkNo = r.ppCode;
            }
        }
        public static void FixLTAData(ParkingContext context)
        {
            FetchPublicAPI publicAPI = new FetchPublicAPI();

            // URA Carpark Info
            var task2 = Task.Run(async() => await publicAPI.GetParkingInfoAsync());

            var LTACarpark = task2.Result;

            context.Carparks.AddRange(LTACarpark);

            context.SaveChanges();
        }
        public static void FixShoppingMallData(ParkingContext context)
        {
            FetchPublicAPI publicAPI = new FetchPublicAPI();

            // URA Carpark Info
            var task2 = Task.Run(async() => await publicAPI.GetShoppingMallAsync());

            var ShoppingmallCarpark = task2.Result;

            List <Carpark> carparks = new List <Carpark>();

            int i = 1;

            foreach (var shop in ShoppingmallCarpark)
            {
                Carpark carpark = new Carpark()
                {
                    Id                 = Guid.NewGuid(),
                    CarparkName        = shop.carpark,
                    Address            = shop.category,
                    AgencyType         = "Shopping Mall",
                    ParkingSystem      = "",
                    CarAvailability    = 0,
                    CarCapacity        = 0,
                    CarparkId          = $"SHP{i}",
                    HVAvailability     = 0,
                    HVCapacity         = 0,
                    IsCentral          = false,
                    LotType            = "C",
                    MAvailability      = 0,
                    MCapacity          = 0,
                    TotalAvailableLots = 0,
                    TotalLots          = 0,
                    XCoord             = "",
                    YCoord             = ""
                };

                carparks.Add(carpark);

                i++;
            }

            context.Carparks.AddRange(carparks);

            context.SaveChanges();
        }
        public static void FixHDBCarparkAvailabilityData(ParkingContext context)
        {
            FetchPublicAPI publicAPI = new FetchPublicAPI();
            var            task      = Task.Run(async() => await publicAPI.GetHDBAvailabilityAsync());

            var HDBCarparkAvailability = task.Result;

            foreach (var value in HDBCarparkAvailability)
            {
                var v = context.Carparks.FirstOrDefault(a => a.CarparkId.Equals(value.carpark_number));

                if (v != null)
                {
                    if (value.carpark_info.Length > 0)
                    {
                        foreach (var x in value.carpark_info)
                        {
                            if (x.lot_type.Equals("C"))
                            {
                                v.LotType        += "C, ";
                                v.CarCapacity     = int.Parse(x.total_lots);
                                v.CarAvailability = int.Parse(x.lots_available);
                            }
                            else if (x.lot_type.Equals("H"))
                            {
                                v.LotType       += "H, ";
                                v.HVCapacity     = int.Parse(x.total_lots);
                                v.HVAvailability = int.Parse(x.lots_available);
                            }
                            else if (x.lot_type.Equals("Y"))
                            {
                                v.LotType      += "M, ";
                                v.MCapacity     = int.Parse(x.total_lots);
                                v.MAvailability = int.Parse(x.lots_available);
                            }
                        }
                    }

                    v.TotalLots          = v.CarCapacity + v.HVCapacity + v.MCapacity;
                    v.TotalAvailableLots = v.CarAvailability + v.HVAvailability + v.MAvailability;

                    context.Carparks.Update(v);
                    context.SaveChanges();
                }
            }
        }
        public static void fixURACarparkAvailabilityData(ParkingContext context)
        {
            FetchPublicAPI publicAPI = new FetchPublicAPI();

            // URA Carpark Availability
            var task2 = Task.Run(async() => await publicAPI.GetURAAvailability());

            var URACarparkAvailability = task2.Result;

            foreach (var value in URACarparkAvailability)
            {
                var v = context.Carparks.FirstOrDefault(a => a.CarparkId.Equals(value.carparkNo));

                // carpark lot type availability
                if (v != null)
                {
                    if (value.lotType == "C")
                    {
                        v.CarAvailability = int.Parse(value.lotsAvailable);
                        v.LotType        += "C,";
                    }
                    else if (value.lotType == "H")
                    {
                        v.HVAvailability = int.Parse(value.lotsAvailable);
                        v.LotType       += "H,";
                    }
                    else if (value.lotType == "M")
                    {
                        v.MAvailability = int.Parse(value.lotsAvailable);
                        v.LotType      += "M,";
                    }
                    else
                    {
                        v.LotType += "No Data";
                    }

                    v.TotalAvailableLots = v.CarAvailability + v.HVAvailability + v.MAvailability;
                }
                context.Carparks.Update(v);
                context.SaveChanges();
            }
        }
        public static void FixURACarparkRatesData(ParkingContext context)
        {
            FetchPublicAPI publicAPI = new FetchPublicAPI();

            var task2 = Task.Run(async() => await publicAPI.GetURAParkingInfoAsync());

            var result = task2.Result;

            foreach (var r in result)
            {
                var h = context.Carparks.FirstOrDefault(a => a.CarparkId == r.ppCode);

                if (h != null)
                {
                    // if there isn't an id filled out (ie: we're not upserting),
                    // we should generate one

                    CarparkRate carparkRate = new CarparkRate
                    {
                        Id = Guid.NewGuid(),
                        // CarparkId = h.Id,
                        StartTime   = r.startTime,
                        EndTime     = r.endTime,
                        Remarks     = r.remarks,
                        SatdayMin   = r.satdayMin,
                        SunPHMin    = r.sunPHMin,
                        VehicleType = r.vehCat,
                        WeekdayMin  = r.weekdayMin,
                        WeekdayRate = r.weekdayRate,
                        SatdayRate  = r.satdayRate,
                        SunPHRate   = r.sunPHRate
                    };

                    context.CarparkRates.Add(carparkRate);
                }
            }

            context.SaveChanges();
        }
        public static void fixURACarparkData2(ParkingContext context)
        {
            FetchPublicAPI publicAPI = new FetchPublicAPI();

            var carparks = new List <Carpark>();

            // URA Carpark Info
            var task = Task.Run(async() => await publicAPI.GetURAParkingInfoAsync());

            var URACarparkInfo = task.Result;

            var carparkNo = "";

            foreach (var r in URACarparkInfo)
            {
                if (carparkNo != r.ppCode)
                {
                    var v = context.Carparks.FirstOrDefault(a => a.CarparkId.Equals(r.ppCode));

                    if (v != null)
                    {
                        if (r.parkingSystem == "C")
                        {
                            v.ParkingSystem = "COUPON PARKING";
                        }
                        else if (r.parkingSystem == "B")
                        {
                            v.ParkingSystem = "ELECTRONIC PARKING";
                        }

                        context.Carparks.Update(v);
                        context.SaveChanges();
                    }
                }

                carparkNo = r.ppCode;
            }
        }
        public static void fixHDBCarparkData(ParkingContext context)
        {
            FetchPublicAPI publicAPI = new FetchPublicAPI();

            var task = Task.Run(async() => await publicAPI.GetHDBParkingInfoAsync());

            var HDBCarparkInfo = task.Result;

            foreach (var r in HDBCarparkInfo)
            {
                var v = context.Carparks.FirstOrDefault(a => a.CarparkId.Equals(r.CarparkId));

                if (v != null)
                {
                    v.XCoord = r.XCoord;
                    v.YCoord = r.YCoord;


                    context.Carparks.Update(v);
                    context.SaveChanges();
                }
            }
        }
        public static void EnsureSeedDataForContext(this ParkingContext context)
        {
            FetchPublicAPI publicAPI = new FetchPublicAPI();

            if (!context.Carparks.Any())
            {
                var carparks = new List <Carpark>();

                var task = Task.Run(async() => await publicAPI.GetHDBParkingInfoAsync());

                carparks = task.Result;

                context.Carparks.AddRange(carparks);

                context.SaveChanges();
            }
            else
            {
                // fixHDBCarparkData(context);
                // fixURACarparkData4(context);

                //var carparks = new List<Carpark>();

                //var task = Task.Run(async () => await publicAPI.GetParkingInfoAsync());

                //carparks = task.Result;

                //context.Carparks.AddRange(carparks);

                //context.SaveChanges();

                // ConvertDateTimeFormat(context);

                //var carparks = new List<Carpark>();

                // FixShoppingMallCarparkRates(context);
                // FixHDBCarparkRates(context);

                // FixURACarparkRatesData(context);

                //FixShoppingMallData(context);

                //FixLTAData(context);
                // FixHDBCarparkAvailabilityData(context);

                //fixURACarparkData2(context);
                //fixURACarparkAvailabilityData(context);
                // fixURACarparkData3(context);


                // carparks = fixURACarparkData();
                // context.Carparks.AddRange(carparks);

                // context.SaveChanges();

                //var carparkAvailability = new List<Carpark_Data>();

                //var task = Task.Run(async () => await publicAPI.GetHDBAvailabilityAsync());

                //carparkAvailability = task.Result;

                //foreach (var value in carparkAvailability)
                //{
                //    var ttlAvailable = 0;
                //    var ttlLots = 0;

                //    if (value.carpark_info.Length > 0)
                //    {
                //        foreach (var d in value.carpark_info)
                //        {
                //            ttlAvailable += int.Parse(d.lots_available);
                //            ttlLots += int.Parse(d.total_lots);
                //        }
                //    }

                //    var v = context.Carparks.FirstOrDefault(a => a.CarparkId.Equals(value.carpark_number));

                //   if (v != null)
                //   {
                //        v.TotalAvailableLots = ttlAvailable;
                //        v.TotalLots = ttlLots;

                //        context.Carparks.Update(v);
                //   }
                //}

                //context.SaveChanges();
            }
        }