# coding: utf-8
import os

from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkcore.http.http_config import HttpConfig
from huaweicloudsdksms.v3.region.sms_region import SmsRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdksms.v3 import SmsClient, CreateMigprojectRequest, PostMigProjectBody, ListMigprojectsRequest, \
    UpdateDefaultMigprojectRequest, UpdateMigprojectRequest, MigProject, DeleteMigprojectRequest

class Migproject:
    def __init__(self):
        pass

    # 获取项目列表
    @staticmethod
    def list_migprojects(client):
        request = ListMigprojectsRequest()
        response = client.list_migprojects(request)
        print(response.__class__)
        print(response)
        return response.migprojects

    # 新建迁移项目
    @staticmethod
    def create_migproject(client):
        request = CreateMigprojectRequest()
        request.body = PostMigProjectBody(
            syncing=False,
            type="MIGRATE_FILE",
            exist_server=True,
            use_public_ip=True,
            region="ap-southeast-1",
            description="",
            name="MIGPROJECT_NAME"
        )
        response = client.create_migproject(request)
        print(response.__class__)
        print(response)
        return response.id

    # 更新默认迁移项目
    @staticmethod
    def update_default_migproject(client, id):
        migproject_list = Migproject.list_migprojects(client)
        for single_migproject in migproject_list:
            if single_migproject.isdefault:
                default_migproject_id = single_migproject.id
                break

        request = UpdateDefaultMigprojectRequest()
        request.mig_project_id = id
        response = client.update_default_migproject(request)
        print(response)

        request.mig_project_id = default_migproject_id
        response = client.update_default_migproject(request)
        print(response.__class__)
        print(response)

    # 更新迁移项目信息
    @staticmethod
    def update_migproject(client, id):
        request = UpdateMigprojectRequest()
        # 以下部分请替换成用户实际参数
        # 设置企业项目ID
        request.mig_project_id = id
        request.body = MigProject(
            # 设置是否同步
            syncing=True,
            # 设置迁移类型
            type="MIGRATE_FILE",
            # 设置是否创建目的端
            exist_server=True,
            # 设置是否使用公网迁移
            use_public_ip=True,
            # 设置目的端region
            region="ap-southeast-1",
            # 设置迁移项目名称
            name="<YOUR MIGPROJCET NAME>"
        )
        response = client.update_migproject(request)
        print(response.__class__)
        print(response)

    # 删除企业项目
    @staticmethod
    def delete_migproject(client, id):
        request = DeleteMigprojectRequest()
        request.mig_project_id = id
        response = client.delete_migproject(request)
        print(response.__class__)
        print(response)

    @staticmethod
    def main(args):
        # 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
        # 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
        ak = os.environ["HUAWEICLOUD_SDK_AK"]
        sk = os.environ["HUAWEICLOUD_SDK_SK"]

        credentials = BasicCredentials(ak, sk) \

        config = HttpConfig.get_default_config()
        config.ignore_ssl_verification = True

        # REGION ID:中国站填写ap-southeast-1,国际站填写ap-southeast-3
        client = SmsClient.new_builder() \
            .with_credentials(credentials) \
            .with_http_config(config) \
            .with_region(SmsRegion.value_of("<REGION ID>")) \
            .build()
        # 以下部分请替换成用户实际参数
        try:
            migprojcet_id = Migproject.create_migproject(client)
            Migproject.update_default_migproject(client, migprojcet_id)
            Migproject.update_migproject(client, migprojcet_id)
            Migproject.delete_migproject(client, migprojcet_id)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)


if __name__ == "__main__":
    Migproject().main(any)