using e_suite.UnitTestCore;
using eSuite.API.Controllers;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Moq;
using System.Security.Claims;
using e_suite.API.Common;

namespace eSuite.API.UnitTests.Controllers.CustomFieldControllerUnitTest;

public abstract class CustomFieldControllerTestBase : TestBase
{
    protected CustomFieldsController _customFieldController;
    protected Mock<ICustomFieldManager>? _customFieldManagerMock;

    protected const string BadRequestText = "Bad request";
    protected const string NotFoundText = "Not found";

    protected CustomFieldControllerTestBase()
    {
        _customFieldManagerMock = new Mock<ICustomFieldManager>();

        _customFieldController = new CustomFieldsController(_customFieldManagerMock.Object);
    }

    public override async Task Setup()
    {
        await base.Setup();

        _customFieldManagerMock = new Mock<ICustomFieldManager>();
        _customFieldController = new CustomFieldsController(_customFieldManagerMock.Object);

        const long id = -1;
        const string email = "test@test.test";
        const string displayName = "Testy McTester";

        AddAuthorisedUserToController(id, email, displayName);
    }

    protected void AddAuthorisedUserToController(long id, string email, string displayName)
    {
        var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
        {
        new(ClaimTypes.PrimarySid, id.ToString()),
        new(ClaimTypes.Email, email),
        new(ClaimTypes.Name, displayName)
            // other required and custom claims
        }, "TestAuthentication"));

        _customFieldController.ControllerContext = new ControllerContext
        {
            HttpContext = new DefaultHttpContext { User = user }
        };
    }
}
