-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
89 lines (77 loc) · 2.78 KB
/
Program.cs
File metadata and controls
89 lines (77 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using MimeKit;
using Newtonsoft.Json;
using QRCoder;
using TopSecretSanta;
using TopSecretSanta.Email;
IEmailSender emailSender = new EmailSender();
var currentYear = DateTime.Now.Year;
using var streamReader = new StreamReader("participants.json");
var json = streamReader.ReadToEnd();
var participants = JsonConvert.DeserializeObject<List<Participant>>(json)!;
var giftReceivers = participants.OrderBy(_ => Guid.NewGuid()).ToList();
var giftGivers = participants.OrderBy(_ => Guid.NewGuid()).ToList();
var giftPairings = new List<GiftingPairing>();
foreach (var giftGiver in giftGivers)
{
var giftReceiver = giftReceivers.FirstOrDefault(_ => _.Id != giftGiver.Id);
if (giftReceiver is null || giftReceivers.RemoveAll(_ => _.Id == giftReceiver.Id) != 1)
throw new("Invalid operation result.");
giftPairings.Add(new(giftGiver, giftReceiver));
}
var originalTemplateContent = File.ReadAllText("template.html")
.Replace("{{year}}", $"{currentYear}")
.Replace("{{giftBudgetWithCurrencySign}}", "15 EUR");
foreach (var giftPairing in giftPairings)
{
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode($"{giftPairing.GiftReceiver.Name}", QRCodeGenerator.ECCLevel.Q);
var qrCode = new QRCode(qrCodeData);
var qrCodeImage = qrCode.GetGraphic(5, Color.Black, Color.White, true);
emailSender.SendEmail(
new()
{
To = new List<MailboxAddress> { new(giftPairing.GiftGiver.Name, giftPairing.GiftGiver.Email) },
Subject = $"Secret Santa {currentYear}.",
Content = originalTemplateContent.Replace("{{genderSpecificSanta}}", giftPairing.GiftGiver.Gender == Gender.Female ? "tajna bakica mraz" : "tajni djedica mraz"),
AttachedFile = new() { Name = "SecretQRCode.png", Content = BitmapUtilities.BitmapToBytes(qrCodeImage) }
});
}
namespace TopSecretSanta
{
public class Participant
{
public Guid Id = Guid.NewGuid();
public string Name;
public string Email;
public Gender Gender;
}
public enum Gender
{
Female,
Male
}
public class GiftingPairing
{
public GiftingPairing(Participant giftGiver, Participant giftReceiver)
{
GiftGiver = giftGiver;
GiftReceiver = giftReceiver;
}
public Participant GiftGiver { get; set; }
public Participant GiftReceiver { get; set; }
}
public class BitmapUtilities
{
public static Byte[] BitmapToBytes(Bitmap img)
{
using var stream = new MemoryStream();
img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
return stream.ToArray();
}
}
}