using System.Threading.Tasks;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Diagnostics;
public int Id { get; set; }
public string Name { get; set; }
public int Contact { get; set; }
public string Address { get; set; }
public Client(int id, string name, int contact, string address)
public int Id { get; set; }
public string Service_Name { get; set; }
public string Service_Description { get; set; }
public decimal Cost_Price { get; set; }
public Services(int id, string service_name, string service_description, decimal cost_price)
Service_Name = service_name;
Service_Description = service_description;
public int Id { get; set; }
public string Brand { get; set; }
public string Model { get; set; }
public int Year { get; set; }
public string Registration { get; set; }
public Vehicle(int id, string brand, string model, int year, string registration)
Registration = registration;
static List<Client> clients = new List<Client>();
static List<Vehicle> vehicles = new List<Vehicle>();
static List<Services> services = new List<Services>();
await loadClientsFromGitHubGist();
Console.Write(" ******************************************************************\n");
Console.Write("**------------------------------ MAIN MENU -----------------------------**\n");
Console.Write("**-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-**\n");
Console.Write("** " + timer() + " **\n");
Console.Write("** ** **\n");
Console.Write("** {1} - Clients ** {2} - Vehicles **\n");
Console.Write("** ** **\n");
Console.Write("** {3} - Services ** {4} - DataSheet **\n");
Console.Write("** ** **\n");
Console.Write("** {0} - Exit **\n");
Console.Write("** ** **\n");
Console.Write(" ***********************************************************************\n");
Console.Write("Choose an option:");
int option = int.Parse(Console.ReadLine());
Console.WriteLine("Invalid Option");
Console.WriteLine("Press Enter to continue!");
DateTime todayDate = DateTime.Now;
return todayDate.ToString("MM/dd/yyyy HH:mm");
Console.Write(" ******************************************************************\n");
Console.Write("**------------------------------ CLIENT MENU ---------------------------**\n");
Console.Write("**-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-**\n");
Console.Write("** ** **\n");
Console.Write("** {1} - Add new Client ** {2} - Edit Client **\n");
Console.Write("** ** **\n");
Console.Write("** {3} - Remove Client ** {4} - List Clients **\n");
Console.Write("** ** **\n");
Console.Write("** {5} - Back **\n");
Console.Write("** ** **\n");
Console.Write(" *************************************************************************\n");
Console.Write("Choose an option:");
int sub_option = int.Parse(Console.ReadLine());
Console.WriteLine("--- Client DataSheet ---");
string name = Console.ReadLine();
Console.Write("Contact:");
int contact = int.Parse(Console.ReadLine());
Console.Write("Address:");
string address = Console.ReadLine();
clients.Add(new Client(clients.Count + 1, name, contact, address));
Console.WriteLine("Client added successfully");
Console.WriteLine("Press Enter to continue...");
Console.Write(" *******************************************************************\n");
Console.Write("**---------------------------- CLIENTS ---------------------------**\n");
Console.Write("**-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=**\n");
Console.WriteLine("No clients available.");
foreach (var clients in clients)
Console.WriteLine($"Id: {clients.Id}, Name: {clients.Name}");
Console.Write(" *******************************************************************\n");
Console.Write("Edit client by id:");
int id = int.Parse(Console.ReadLine());
Client client = clients.Find(c => c.Id == id);
Console.WriteLine("--- Atual Client DataSheet ---");
Console.Write("Name: " + client.Name);
Console.WriteLine("Contact: " + client.Contact);
Console.WriteLine("Address: " + client.Address);
Console.WriteLine("-- Enter new information --");
Console.WriteLine("1 - Edit Name");
Console.WriteLine("2 - Edit Contact");
Console.WriteLine("3 - Edit Address");
Console.WriteLine("4 - Edit all information");
Console.WriteLine("0 - Back");
int editOpt = int.Parse(Console.ReadLine());
Console.WriteLine("Enter new Name:");
client.Name = Console.ReadLine();
Console.WriteLine("Name updated succesfully!");
Console.WriteLine("Enter new Contact:");
client.Contact = int.Parse(Console.ReadLine());
Console.WriteLine("Contact updated succesfully!");
Console.WriteLine("Enter new Address:");
client.Address = Console.ReadLine();
Console.WriteLine("Address updated succesfully!");
Console.WriteLine("Enter all new information:");
Console.WriteLine("Enter new Name:");
client.Name = Console.ReadLine();
Console.WriteLine("Enter new Contact:");
client.Contact = int.Parse(Console.ReadLine());
Console.WriteLine("Enter new address:");
client.Address = Console.ReadLine();
Console.WriteLine("Client not found!");
Console.WriteLine("Press Enter to continue");
static void removeClient()
Console.Write(" *******************************************************************\n");
Console.Write("**---------------------------- CLIENTS ---------------------------**\n");
Console.Write("**-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=**\n");
Console.Write("**| ID | NOME |**\n");
Console.WriteLine("No clients available.");
foreach (var clients in clients)
Console.WriteLine($"Id: {clients.Id}, Name: {clients.Name}");
Console.Write(" *******************************************************************\n");
Console.Write("Enter Client Id to remove:");
int id = int.Parse(Console.ReadLine());
Client client = clients.Find(c => c.Id == id);
Console.WriteLine("Client removed successfully!");
Console.WriteLine("Clients not found!");
Console.WriteLine("Press Enter to continue!");
static void listClients()
Console.Write(" *******************************************************************\n");
Console.Write("**---------------------------- CLIENTS ---------------------------**\n");
Console.Write("**-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=**\n");
Console.Write("**| ID | NOME | **\n");
Console.WriteLine("No clients available");
foreach (var client in clients)
Console.WriteLine($"Id: {client.Id}, Name: {client.Name}, Contact: {client.Contact}, Address: {client.Address}");
Console.Write(" *******************************************************************\n");
Console.WriteLine("Press Enter to continue...");
static void VehicleMenu()
Console.WriteLine("Vehicle Menu");
Console.WriteLine("1 - Add new Vehicle");
Console.WriteLine("2 - Edit Client");
Console.WriteLine("3 - Remove Client");
Console.WriteLine("4 - List Clients");
Console.WriteLine("5 - Back");
int sub_option = int.Parse(Console.ReadLine());
static void ServiceMenu()
Console.WriteLine("Service Menu");
Console.WriteLine("1 - Add new Service");
Console.WriteLine("2 - Edit Service");
Console.WriteLine("3 - Remove Service");
Console.WriteLine("4 - List Services");
Console.WriteLine("5 - Back");
int sub_option = int.Parse(Console.ReadLine());
string jsonData = JsonConvert.SerializeObject(clients);
updateClientToGitHubGist(jsonData).Wait();
static void DataSheetMenu()
Console.WriteLine("DataSheet Menu");
Console.WriteLine("1 - Update DataSheet");
Console.WriteLine("2 - List DataSheet");
Console.WriteLine("3 - Download DataSheet");
Console.WriteLine("4 - Delete DataSheet");
Console.WriteLine("5 - Back");
int sub_option = int.Parse(Console.ReadLine());
string jsonData = JsonConvert.SerializeObject(clients);
updateClientToGitHubGist(jsonData).Wait();
static async Task loadClientsFromGitHubGist()
string gistId = "020b2d27af9b4def8a982f515fc70856";
string gistUrl = $"https://api.github.com/gists/{gistId}";
using (var httpClient = new HttpClient())
httpClient.DefaultRequestHeaders.Add("User-Agent", "request");
HttpResponseMessage response = await httpClient.GetAsync(gistUrl);
if (response.IsSuccessStatusCode)
string jsonResponse = await response.Content.ReadAsStringAsync();
dynamic gistData = JsonConvert.DeserializeObject(jsonResponse);
string jsonData = gistData["files"]["DataSheet.json"]["content"];
clients = JsonConvert.DeserializeObject<List<Client>>(jsonData);
Console.WriteLine("Clients loaded successfully!");
Console.WriteLine("Error loading clients: " + response.ReasonPhrase);
Console.WriteLine("Error loading clients: " + ex.Message);
static async Task updateClientToGitHubGist(string jsonData)
string gistId = "020b2d27af9b4def8a982f515fc70856";
string gistUrl = $"https://api.github.com/gists/{gistId}";
using (var httpClient = new HttpClient())
httpClient.DefaultRequestHeaders.Add("User-Agent", "joaoomartins");
httpClient.DefaultRequestHeaders.Add("Authorization", "token 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");
files = new Dictionary<string, object>
{ "DataSheet.json", new { content = jsonData} }
string jsonContent = JsonConvert.SerializeObject(data);
var content = new StringContent(jsonContent, System.Text.Encoding.UTF8, "application/json");
HttpResponseMessage response = await httpClient.PatchAsync(gistUrl, content);
if (response.IsSuccessStatusCode)
Console.WriteLine("Data saved successfully!");
string errorMessage = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Error updating data! Status code: {response.StatusCode}, Reason: {response.ReasonPhrase}, Error message: {errorMessage}");
Console.WriteLine("Error updating data: " + ex.Message);