using System.Reflection;
using JobTrackerApi.Controllers;
using JobTrackerApi.Services;
using Xunit;

namespace JobTrackerApi.Tests;

public sealed class OwnershipGuardTests
{
    [Fact]
    public void Attachments_controller_has_owned_attachment_lookup_helper()
    {
        var method = typeof(AttachmentsController).GetMethod("FindOwnedAttachmentAsync", BindingFlags.NonPublic | BindingFlags.Instance);
        Assert.NotNull(method);
    }

    [Fact]
    public void Correspondence_controller_has_owned_message_lookup_helper()
    {
        var method = typeof(CorrespondenceController).GetMethod("FindOwnedMessageAsync", BindingFlags.NonPublic | BindingFlags.Instance);
        Assert.NotNull(method);
    }

    [Fact]
    public void Summarizer_service_uses_sha256_cache_key_builder()
    {
        var method = typeof(SummarizerService).GetMethod("BuildCacheKey", BindingFlags.NonPublic | BindingFlags.Static);
        Assert.NotNull(method);

        var first = (string)method!.Invoke(null, new object[] { "example text", 150, 30 })!;
        var second = (string)method.Invoke(null, new object[] { "example text", 150, 30 })!;
        var different = (string)method.Invoke(null, new object[] { "different text", 150, 30 })!;

        Assert.Equal(first, second);
        Assert.StartsWith("summ:", first);
        Assert.NotEqual(first, different);
    }
}
