using IntegryApiClient.Core.Domain.Abstraction.Contracts.Account;
using IntegryApiClient.Core.Domain.RestClient.Contacts;
using salesbook.Shared.Core.Dto;
using salesbook.Shared.Core.Entity;
using salesbook.Shared.Core.Interface;

namespace salesbook.Shared.Core.Services;

public class IntegryApiService(IIntegryApiRestClient integryApiRestClient, IUserSession userSession)
    : IIntegryApiService
{
    public Task<List<StbActivity>?> RetrieveActivity(string? dateFilter)
    {
        var queryParams = new Dictionary<string, object> { { "dateFilter", dateFilter ?? "2020-01-01" } };

        return integryApiRestClient.AuthorizedGet<List<StbActivity>?>("crm/retrieveActivity", queryParams);
    }

    public Task<List<JtbComt>?> RetrieveAllCommesse(string? dateFilter)
    {
        var queryParams = new Dictionary<string, object>();

        if (dateFilter != null)
        {
            queryParams.Add("dateFilter", dateFilter);
        }

        return integryApiRestClient.AuthorizedGet<List<JtbComt>?>("crm/retrieveCommesse", queryParams);
    }

    public Task<TaskSyncResponseDTO> RetrieveAnagClie(string? dateFilter)
    {
        var queryParams = new Dictionary<string, object>();

        if (dateFilter != null)
        {
            queryParams.Add("dateFilter", dateFilter);
        }

        return integryApiRestClient.AuthorizedGet<TaskSyncResponseDTO>("crm/retrieveClienti", queryParams)!;
    }

    public Task<TaskSyncResponseDTO> RetrieveProspect(string? dateFilter)
    {
        var queryParams = new Dictionary<string, object>();

        if (dateFilter != null)
        {
            queryParams.Add("dateFilter", dateFilter);
        }

        return integryApiRestClient.AuthorizedGet<TaskSyncResponseDTO>("crm/retrieveProspect", queryParams)!;
    }

    public Task<SettingsResponseDTO> RetrieveSettings() =>
        integryApiRestClient.AuthorizedGet<SettingsResponseDTO>("crm/retrieveSettings")!;

    public Task DeleteActivity(string activityId)
    {
        var queryParams = new Dictionary<string, object>
        {
            { "activityId", activityId }
        };

        return integryApiRestClient.AuthorizedGet<object>($"activity/delete", queryParams);
    }

    public Task<List<StbActivity>?> SaveActivity(ActivityDTO activity) =>
        integryApiRestClient.AuthorizedPost<List<StbActivity>?>("crm/saveActivity", activity);
}