
using IdentityServer8;
using IdentityServer8.Models;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Yavsc.Settings;

namespace Yavsc;

public static class Config
{
        public static string? Authority { get;  set; }

        public static IConfigurationRoot? GoogleWebClientConfiguration { get;  set; }
        public static GoogleServiceAccount? GServiceAccount { get;  set; }

        public static SiteSettings SiteSetup { get;  set; } = new SiteSettings();
        public static FileServerOptions? UserFilesOptions { get; set; }
        public static FileServerOptions? GitOptions { get; set; }
        public static string AvatarsDirName {  set; get; } = "Avatars";
        public static string GitDirName {  set; get; } = "Git";

    public static GoogleAuthSettings? GoogleSettings { get;  set; }
    public static SmtpSettings? SmtpSetup { get;  set; }
    public static string? Temp { get;  set; }
        public static FileServerOptions? AvatarsOptions { get; set; }
        public static string UserBillsDirName {  set; get; } = "Bills";
        public static string UserFilesDirName {  set; get; } = "Files";



        /// <summary>
        /// Lists Available user profile classes,
        /// populated at startup, using reflection.
        /// </summary>
        public static List<Type> ProfileTypes = new List<Type>();


    public static IEnumerable<IdentityResource> IdentityResources =>
        [
            new IdentityResources.OpenId(),
            new IdentityResources.Profile(),
            new IdentityResources.Email()
        ];

    public static IEnumerable<ApiScope> ApiScopes =>
        [
            new ApiScope("scope1",new string[] {"scope1"}),
            new ApiScope("scope2",new string[] {"scope2"}),
        ];

    public static IEnumerable<Client> Clients =>
        [
            // m2m client credentials flow client
            new Client
            {
                ClientId = "m2m.client",
                ClientName = "Client Credentials Client",
                ClientSecrets = { new Secret("511536EF-F270-4058-80CA-1C89C192F69A".Sha256()) },

                AllowedGrantTypes = GrantTypes.ResourceOwnerPasswordAndClientCredentials,
                AllowedScopes = { "scope1" }
            },

            // interactive client using code flow + pkce
            new Client
            {
                ClientId = "mvc",
                ClientSecrets = { new Secret("49C1A7E1-0C79-4A89-A3D6-A37998FB86B0".Sha256()) },

                AllowedGrantTypes = GrantTypes.Code,
                AlwaysIncludeUserClaimsInIdToken = true,

                RedirectUris = { "https://localhost:5003/signin-oidc",
                "http://localhost:5002/signin-oidc"  },
                PostLogoutRedirectUris = { "https://localhost:5003/signout-callback-oidc",
                 "http://localhost:5002/signout-callback-oidc" },

                AllowedScopes = {
                    IdentityServerConstants.StandardScopes.OpenId,
                    IdentityServerConstants.StandardScopes.Profile,
                    IdentityServerConstants.StandardScopes.Email,
                    IdentityServerConstants.StandardScopes.OfflineAccess,
                    "scope2" },
            },
        ];

    public static PayPalSettings? PayPalSettings { get; set; }
}
