Загрузка данных



public abstract class ListViewProfileEntityMapper {

    protected void mapApproveStatus(ListViewProfileEntity source, @MappingTarget ListViewProfile target) {
        switch (source.getProfileType()) {
            case SMS:
                target.setApproveStatus(mapSmsProfileStatus(source.getApproveStatus()));
                break;
            case VIBER:
                target.setApproveStatus(mapViberProfileStatus(source.getApproveStatus()));
                break;
            case WHATSAPP:
                if (StringUtils.hasLength(source.getCode())) {
                    target.setApproveStatus(mapWhatsAppClientProfileStatus(source.getApproveStatus()));
                } else if (source.getSubjectId() == null &&
                        DRAFT != WhatsAppESProfileStatus.valueOf(source.getApproveStatus())) {
                    // for partners when subject is missing - they need to finish registration
                    target.setApproveStatus(NEEDS_ATTENTION);
                } else {
                    target.setApproveStatus(mapEmbeddedSignupWaStatus(source.getApproveStatus()));
                }
                break;
            case PUSH:
                target.setApproveStatus(mapPushStatus(source.getApproveStatus()));
                break;
            case VK_NOTIFY:
                target.setApproveStatus(mapVkNotifyProfileStatus(source.getApproveStatus()));
                break;
            case OK_NOTIFY:
                target.setApproveStatus(mapOkNotifyProfileStatus(source.getApproveStatus()));
                break;
            case MAX_BOT:
                target.setApproveStatus(mapMaxBotProfileStatus(source.getApproveStatus()));
                break;
            case MAX:
                target.setApproveStatus(mapMaxProfileStatus(source));
                break;
            default:
                throw new IllegalStateException("Unmapped profile type: " + source.getProfileType());
        }
    }

    protected ListViewProfileStatus mapWhatsAppClientProfileStatus(String approveStatus) {
        WhatsAppESClientProfileStatus status = WhatsAppESClientProfileStatus.valueOf(approveStatus);
        return switch (status) {
            case NEW -> ListViewProfileStatus.DRAFT;
            case ACCEPTED -> ListViewProfileStatus.REGISTRATION;
            case DELETED -> ListViewProfileStatus.DISABLED;
        };
    }

    protected ListViewProfileStatus mapSmsProfileStatus(String statusName) {
        SmsProfileStatus status = SmsProfileStatus.valueOf(statusName);
        return switch (status) {
            case DRAFT -> ListViewProfileStatus.DRAFT;
            case IN_PROGRESS, CREATE_SUBJECT -> ListViewProfileStatus.REGISTRATION;
            case REJECTED -> ListViewProfileStatus.DISABLED;
            case CREATE_SUBJECT_ERROR -> ListViewProfileStatus.PROBLEM;
            case DONE -> ListViewProfileStatus.ACTIVE;
            default -> throw new IllegalStateException("Unmapped SMS profile status: " + status);
        };
    }

    protected ListViewProfileStatus mapViberProfileStatus(String statusName) {
        ViberProfileStatus status = ViberProfileStatus.valueOf(statusName);
        return switch (status) {
            case DRAFT -> ListViewProfileStatus.DRAFT;
            case NOT_INITIALIZED, IN_PROGRESS, CREATE_SUBJECT -> ListViewProfileStatus.REGISTRATION;
            case REJECTED -> ListViewProfileStatus.DISABLED;
            case CREATE_SUBJECT_ERROR -> ListViewProfileStatus.PROBLEM;
            case DONE -> ListViewProfileStatus.ACTIVE;
            default -> throw new IllegalStateException("Unmapped Viber profile status: " + status);
        };
    }

    protected ListViewProfileStatus mapEmbeddedSignupWaStatus(String statusName) {
        var status = WhatsAppESProfileStatus.valueOf(statusName);
        return switch (status) {
            case DONE_BUSINESS_VERIFICATION, BUSINESS_VERIFICATION_EXPIRED, DONE_FINISH_REGISTER ->
                    ListViewProfileStatus.ACTIVE;
            case DRAFT -> ListViewProfileStatus.DRAFT;
            case SENT_TO_PLATFORM -> ListViewProfileStatus.REGISTRATION;
            case CANCELLED, DISABLED -> ListViewProfileStatus.DISABLED;
            default -> throw new IllegalStateException("Unmapped EmbeddedSignupWa profile status: " + status);
        };
    }

    protected ListViewProfileStatus mapPushStatus(String statusName) {
        PushProfileStatus status = PushProfileStatus.valueOf(statusName);
        return switch (status) {
            case NO_CONNECTED_APPS -> ListViewProfileStatus.REGISTRATION;
            case ACTIVE -> ListViewProfileStatus.ACTIVE;
            case NEED_ATTENTION -> NEEDS_ATTENTION;
            case DISABLED -> ListViewProfileStatus.DISABLED;
            default -> throw new IllegalStateException("Unmapped Push profile status: " + status);
        };
    }

    protected ListViewProfileStatus mapVkNotifyProfileStatus(String statusName) {
        var status = VkNotifyProfileStatus.valueOf(statusName);
        return switch (status) {
            case DRAFT -> ListViewProfileStatus.DRAFT;
            case IN_PROGRESS, CREATE_SUBJECT -> ListViewProfileStatus.REGISTRATION;
            case CREATE_SUBJECT_ERROR -> ListViewProfileStatus.PROBLEM;
            case REJECTED, CANCELLED -> ListViewProfileStatus.DISABLED;
            case DONE -> ListViewProfileStatus.ACTIVE;
            default -> throw new IllegalStateException("Unmapped Vk Notify profile status: " + status);
        };
    }

    protected ListViewProfileStatus mapMaxBotProfileStatus(String statusName) {
        var status = MaxBotProfileStatus.valueOf(statusName);
        return switch (status) {
            case DRAFT -> ListViewProfileStatus.DRAFT;
            case IN_PROGRESS, CREATE_SUBJECT -> ListViewProfileStatus.REGISTRATION;
            case CREATE_SUBJECT_ERROR -> ListViewProfileStatus.PROBLEM;
            case CANCELLED -> ListViewProfileStatus.DISABLED;
            case DONE -> ListViewProfileStatus.ACTIVE;
            default -> throw new IllegalStateException("Unmapped Max Bot profile status: " + status);
        };
    }

    protected ListViewProfileStatus mapMaxProfileStatus(ListViewProfileEntity source) {
        var statusName = source.getApproveStatus();

        if (source.getCode() != null && source.getClientProfileId() == null) {
            var status = MaxClientProfileStatus.valueOf(statusName);
            return switch (status) {
                case NEW -> ListViewProfileStatus.DRAFT;
                case ACCEPTED -> ListViewProfileStatus.REGISTRATION;
                case DELETED -> ListViewProfileStatus.DISABLED;
            };
        } else {
            var status = MaxProfileStatus.valueOf(statusName);
            return switch (status) {
                case DRAFT -> ListViewProfileStatus.DRAFT;
                case LOGIN_REQUIRED, TOKEN_EXPIRED -> NEEDS_ATTENTION;
                case CREATE_SUBJECT -> ListViewProfileStatus.REGISTRATION;
                case CREATE_SUBJECT_ERROR -> ListViewProfileStatus.PROBLEM;
                case CANCELLED -> ListViewProfileStatus.DISABLED;
                case DONE -> ListViewProfileStatus.ACTIVE;
            };
        }
    }

    protected ListViewProfileStatus mapOkNotifyProfileStatus(String statusName) {
        var status = OkNotifyProfileStatus.valueOf(statusName);
        return switch (status) {
            case DRAFT -> ListViewProfileStatus.DRAFT;
            case IN_PROGRESS, CREATE_SUBJECT -> ListViewProfileStatus.REGISTRATION;
            case CREATE_SUBJECT_ERROR -> ListViewProfileStatus.PROBLEM;
            case REJECTED, CANCELLED -> ListViewProfileStatus.DISABLED;
            case DONE -> ListViewProfileStatus.ACTIVE;
            default -> throw new IllegalStateException("Unmapped OK Notify profile status: " + status);
        };
    }
}