using System.Text;
using Geralt;
using Npgsql;

namespace Femto.Database.Seed;

public static class TestDataSeeder
{
    private const int Iterations = 3;
    private const int MemorySize = 67108864;
    
    public static async Task Seed(NpgsqlDataSource dataSource)
    {
        var id = Guid.Parse("0196960c-6296-7532-ba66-8fabb38c6ae0");
        var username = "johnbotris";
        var salt = new byte[32];
        var password = "password"u8;
        var hashInput = new byte[password.Length + salt.Length];
        password.CopyTo(hashInput);
        salt.CopyTo(hashInput, password.Length);
        var passwordHash = new byte[128];
        Argon2id.ComputeHash(
            passwordHash,
            hashInput,
            Iterations,
            MemorySize
        );
        
        await using var addToHistoryCommand = dataSource.CreateCommand(
            $"""
            INSERT INTO blog.author
            (id, username)
            VALUES
            (@id, @username)
            ;

            INSERT INTO blog.post
            (id, author_id, possible_reactions, content)
            VALUES
            ('019691a0-48ed-7eba-b8d3-608e25e07d4b', @id, '["🍆", "🧢", "🧑🏾‍🎓", "🥕", "🕗"]', 'However, authors often misinterpret the zoology as a smothered advantage, when in actuality it feels more like a blindfold accordion. They were lost without the chastest puppy that composed their Santa.'),
            ('019691a0-4ace-7bb5-a8f3-e3362920eba0', @id, '["🍆", "🧢", "🧑🏾‍🎓", "🥕", "🕗"]', 'Extending this logic, a swim can hardly be considered a seasick duckling without also being a tornado. Some posit the whity voyage to be less than dippy.'),
            ('019691a0-4c3e-726f-b8f6-bcbaabe789ae', @id, '["🍆", "🧢", "🧑🏾‍🎓", "🥕", "🕗"]', 'Few can name a springless sun that isn''t a thudding Vietnam. The burn of a competitor becomes a frosted target.'),
            ('019691a0-4dd3-7e89-909e-94a6fd19a05e', @id, '["🍆", "🧢", "🧑🏾‍🎓", "🥕", "🕗"]', 'Some unwitched marbles are thought of simply as currencies. A boundary sees a nepal as a chordal railway.')
            ;


            INSERT INTO blog.post_media
            (id, post_id, url, ordering)
            VALUES
            ('019691a2-c1b0-705e-8865-b5053bed9671', '019691a0-48ed-7eba-b8d3-608e25e07d4b', 'https://wallpaperaccess.com/full/1401569.jpg', 0),
            ('019691b5-bbfa-7481-ad74-25a6fea8db60', '019691a0-48ed-7eba-b8d3-608e25e07d4b', 'https://i.redd.it/4g8k43py9pi81.png', 1),
            ('019691b5-d813-7f46-87a5-8ee4e987622c', '019691a0-4ace-7bb5-a8f3-e3362920eba0', 'https://wallpapercave.com/wp/wp5305675.jpg', 0),
            ('019691b5-f345-7d86-9eba-2ca6780d8358', '019691a0-4c3e-726f-b8f6-bcbaabe789ae', 'https://wallpapers.com/images/hd/big-chungus-kpb89wgv5ov3znql.jpg', 0),
            ('019691b6-07cb-7353-8c33-68456188f462', '019691a0-4c3e-726f-b8f6-bcbaabe789ae', 'https://wallpapers.com/images/hd/big-chungus-2bxloyitgw7q1hfg.jpg', 1),
            ('019691b6-2608-7088-8110-f0f6e35fa633', '019691a0-4dd3-7e89-909e-94a6fd19a05e', 'https://www.pinclipart.com/picdir/big/535-5356059_big-transparent-chungus-png-background-big-chungus-clipart.png', 0)
            ;

            INSERT INTO blog.post_reaction
            (post_id, author_id, emoji)
            VALUES
            ('019691a0-48ed-7eba-b8d3-608e25e07d4b', @id, '🍆'),
            ('019691a0-4ace-7bb5-a8f3-e3362920eba0', @id, '🍆'),
            ('019691a0-4c3e-726f-b8f6-bcbaabe789ae', @id, '🧑🏾‍'),
            ('019691a0-4c3e-726f-b8f6-bcbaabe789ae', @id, '🕗')
            ;

            INSERT INTO blog.post_comment
            (id, post_id, author_id, content)
            VALUES
            ('9116da05-49eb-4053-9199-57f54f92e73a', '019691a0-48ed-7eba-b8d3-608e25e07d4b', @id, 'this is a comment!')
            ;

            INSERT INTO authn.user_identity
            (id, username, password_hash, password_salt)
            VALUES
            (@id, @username, @passwordHash, @salt);
            
            INSERT INTO authn.user_role
            (user_id, role)
            VALUES
            (@id, 1);

            INSERT INTO authn.signup_code
            (code, recipient_email, recipient_name, expires_at, redeeming_user_id)
            VALUES
            ('fickli', 'me@johnbotr.is', 'john', null, null);
            """
        );
        
        addToHistoryCommand.Parameters.AddWithValue("@id", id);
        addToHistoryCommand.Parameters.AddWithValue("@username", username);
        addToHistoryCommand.Parameters.AddWithValue("@passwordHash", passwordHash);
        addToHistoryCommand.Parameters.AddWithValue("@salt", salt);

        await addToHistoryCommand.ExecuteNonQueryAsync();
    }
}
