//
//  XXGUIKit.m
//  XXGPlayKit
//
//  Created by apple on 2025/3/7.
//

#import "XXGUIKit.h"
#import "XXGWindowManager.h"
#import "XXGComeinViewController.h"
#import "XXGNavigationController.h"
#import "XXGBaseViewController.h"
#import "XXGSelectAccountViewController.h"
#import "XXGPopupViewController.h"
#import "XXGChangeViewController.h"
#import "XXGBindMobileViewController.h"
#import "XXGUCenterViewController.h"
#import "XXGSelectPayViewController.h"
#import "XXGSaveNamePSViewController.h"

#ifdef XXGPLAYKITCN_TARGET
#import "XXGRealNameViewController.h"
#import "XXGUCenterNewViewController.h"
#endif

#ifdef XXGPLAYKITOS_TARGET
#import "XXGSelectMobileAccountViewController.h"
#import "XXGH5LoginViewController.h"
#endif

#import "XXGPlayKitConfig.h"

@implementation XXGUIKit
+ (void)__xxpk_showNoStackViewControllerWithType:(XXGShowViewControllerType)type xxpk_object:(id)object xxpk_delegate:(id<XXGUIkitDelegate>)xxpk_delegate {
    XXGNavigationController *nav = [self __xxpk_getShowVCWithType:type xxpk_object:object xxpk_delegate:xxpk_delegate];
    [[XXGWindowManager shared] __xxpk_showNoStackWindowWithRootViewController:nav];
}

+ (void)xxpk_showViewControllerWithType:(XXGShowViewControllerType)type xxpk_delegate:(id<XXGUIkitDelegate>)xxpk_delegate {
    [self xxpk_showViewControllerWithType:type xxpk_object:nil xxpk_delegate:xxpk_delegate];
}
+ (void)xxpk_showViewControllerWithType:(XXGShowViewControllerType)type xxpk_object:(id)xxpk_object xxpk_delegate:(id<XXGUIkitDelegate> _Nullable)xxpk_delegate {
    XXGNavigationController *nav = [self __xxpk_getShowVCWithType:type xxpk_object:xxpk_object xxpk_delegate:xxpk_delegate];
    [[XXGWindowManager shared] xxpk_showWindowWithRootViewController:nav];
}

+ (XXGNavigationController *)__xxpk_getShowVCWithType:(XXGShowViewControllerType)type xxpk_object:(id)xxpk_object xxpk_delegate:(id<XXGUIkitDelegate> _Nullable)xxpk_delegate {
    XXGBaseViewController *vc = nil;
    switch (type) {
        case XXGShowViewControllerTypeComein:
            vc = [[XXGComeinViewController alloc] init];
            break;
        case XXGShowViewControllerTypeSelectAccount:
            vc = [XXGSelectAccountViewController new];
            break;
        case XXGShowViewControllerTypeBindMobile:
            vc = [XXGBindMobileViewController new];
            break;
        case XXGShowViewControllerTypeUserCenter:
#ifdef XXGPLAYKITCN_TARGET
            if (XXGPlayKitConfig.shared.xxpk_adaptionCof.xxpk_box_center.xxpk_is_new_ucenter) {
                vc = [XXGUCenterNewViewController new];
                break;
            }
#endif
            vc = [XXGUCenterViewController new];
            break;
        case XXGShowViewControllerTypeSelectPP:
            vc = [XXGSelectPayViewController new];
            break;
        case XXGShowViewControllerTypeChangePassword:
            vc = [XXGChangeViewController new];
            break;
        case XXGShowViewControllerTypePopup:
            vc = [XXGPopupViewController new];
            break;
        case XXGShowViewControllerTypeSavePS:
            vc = [XXGSaveNamePSViewController new];
            break;
#ifdef XXGPLAYKITCN_TARGET
        case XXGShowViewControllerTypeRealName:
            vc = [XXGRealNameViewController new];
            break;
#endif
#ifdef XXGPLAYKITOS_TARGET
        case XXGShowViewControllerTypeSelectMobileAccount:
            vc = [XXGSelectMobileAccountViewController new];
            break;
        case XXGShowViewControllerTypeH5Login:
            vc = [XXGH5LoginViewController new];
            break;
#endif
    }
    vc.xxpk_delegate = xxpk_delegate;
    vc.xxpk_object = xxpk_object;
    XXGNavigationController *nav = [[XXGNavigationController alloc] initWithRootViewController:vc];
    return nav;
}

+ (UIWindow *)xxpk_currentWindow {
    return XXGWindowManager.shared.xxpk_currentWindow;
}

+ (void)xxpk_dissmissCurrentWinow {
    [[XXGWindowManager shared] xxpk_dismissWindow];
}

+ (void)xxpk_dissmissAllWindows {
    [[XXGWindowManager shared] xxpk_dismissAllWindows];
}
@end
