/* Articles */
-- name: GetArticleByID :one
Select * from Articles
WHERE ID = $1 LIMIT 1;

-- name: GetArticleByUrl :one
Select * from Articles
Where Url = $1 LIMIT 1;

-- name: ListArticles :many
Select * From articles Limit $1;

-- name: GetArticlesBySource :many
select * from articles
INNER join sources on articles.sourceid=Sources.ID
where site = $1;

-- name: GetArticlesBySourceId :many
Select * From articles
Where sourceid = $1 Limit 50;

-- name: GetArticlesBySourceName :many
select 
articles.ID, articles.SourceId, articles.Tags, articles.Title, articles.Url, articles.PubDate, articles.Video, articles.VideoHeight, articles.VideoWidth, articles.Thumbnail, articles.Description, articles.AuthorName, articles.AuthorImage, sources.source, sources.name
From articles
Left Join sources
On articles.sourceid = sources.id
Where name = $1;

-- name: CreateArticle :exec
INSERT INTO Articles 
(ID, SourceId, Tags, Title, Url, PubDate, Video, VideoHeight, VideoWidth, Thumbnail, Description, AuthorName, AuthorImage)
Values
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13);


/* DiscordQueue */
-- name: CreateDiscordQueue :exec
Insert into DiscordQueue
(ID, ArticleId)
Values
($1, $2);

-- name: GetDiscordQueueByID :one
Select * from DiscordQueue
Where ID = $1 LIMIT 1;

-- name: DeleteDiscordQueueItem :exec
Delete From DiscordQueue Where ID = $1;

-- name: ListDiscordQueueItems :many
Select * from DiscordQueue LIMIT $1;

/* DiscordWebHooks */
-- name: CreateDiscordWebHook :exec
Insert Into DiscordWebHooks
(ID, Url, Server, Channel, Enabled)
Values
($1, $2, $3, $4, $5);

-- name: GetDiscordWebHooksByID :one
Select * from DiscordWebHooks
Where ID = $1 LIMIT 1;

-- name: ListDiscordWebHooksByServer :many
Select * From DiscordWebHooks
Where Server = $1;

-- name: ListDiscordWebhooks :many
Select * From discordwebhooks LIMIT $1;

-- name: DeleteDiscordWebHooks :exec
Delete From discordwebhooks Where ID = $1;


/* Icons */

-- name: CreateIcon :exec
INSERT INTO Icons
(ID, FileName, Site)
VALUES
($1,$2,$3);

-- name: GetIconByID :one
Select * FROM Icons
Where ID = $1 Limit 1;

-- name: GetIconBySite :one
Select * FROM Icons
Where Site = $1 Limit 1;

-- name: DeleteIcon :exec
Delete From Icons where ID = $1;

/* Settings */

-- name: CreateSettings :one
Insert Into settings
(ID, Key, Value, OPTIONS)
Values
($1,$2,$3,$4)
RETURNING *;

-- name: GetSettingByID :one
Select * From settings
Where ID = $1 Limit 1;

-- name: GetSettingByKey :one
Select * From settings Where 
Key = $1 Limit 1;

-- name: GetSettingByValue :one
Select * From settings Where 
Value = $1 Limit 1;

-- name: DeleteSetting :exec
Delete From settings Where ID = $1;

/* Sources */

-- name: CreateSource :exec
Insert Into Sources
(ID, Site, Name, Source, Type, Value, Enabled, Url, Tags)
Values
($1,$2,$3,$4,$5,$6,$7,$8,$9);

-- name: GetSourceByID :one
Select * From Sources where ID = $1 Limit 1;

-- name: ListSources :many
Select * From Sources Limit $1;

-- name: ListSourcesBySource :many
Select * From Sources where Source = $1;

-- name: DeleteSource :exec
DELETE From sources where id = $1;

-- name: DisableSource :exec
Update Sources Set Enabled = FALSE where ID = $1;

-- name: EnableSource :exec
Update Sources Set Enabled = TRUE where ID = $1;


/* Subscriptions */

-- name: CreateSubscription :exec
Insert Into subscriptions (ID, DiscordWebHookId, SourceId) Values ($1, $2, $3);

-- name: ListSubscriptions :many
Select * From subscriptions Limit $1;

-- name: ListSubscriptionsBySourceId :many
Select * From subscriptions where sourceid = $1;

-- name: QuerySubscriptions :many
Select * From subscriptions Where discordwebhookid = $1 and sourceid = $2;

-- name: GetSubscriptionsBySourceID :many
Select * From subscriptions Where sourceid = $1;

-- name: GetSubscriptionsByDiscordWebHookId :many
Select * from subscriptions Where discordwebhookid = $1;

-- name: DeleteSubscription :exec
Delete From subscriptions Where discordwebhookid = $1 and sourceid = $2;