# Code generated by lark_sdk_gen. DO NOT EDIT.

from pylark.lark_request import RawRequestReq, _new_method_option
import attr
import typing
import io


@attr.s
class BatchUpdateSheetReqRequestDeleteSheet(object):
    sheet_id: str = attr.ib(default="", metadata={"req_type": "json"})  # sheetId


@attr.s
class BatchUpdateSheetReqRequestCopySheetDestination(object):
    title: str = attr.ib(
        default="", metadata={"req_type": "json"}
    )  # 目标工作表名称。不填为 old_title(副本_0)


@attr.s
class BatchUpdateSheetReqRequestCopySheetSource(object):
    sheet_id: str = attr.ib(default="", metadata={"req_type": "json"})  # 源 sheetId


@attr.s
class BatchUpdateSheetReqRequestCopySheet(object):
    source: BatchUpdateSheetReqRequestCopySheetSource = attr.ib(
        default=None, metadata={"req_type": "json"}
    )  # 需要复制的工作表资源
    destination: BatchUpdateSheetReqRequestCopySheetDestination = attr.ib(
        default=None, metadata={"req_type": "json"}
    )  # 工作表 的属性


@attr.s
class BatchUpdateSheetReqRequestAddSheetProperties(object):
    title: str = attr.ib(default="", metadata={"req_type": "json"})  # 工作表标题
    index: int = attr.ib(
        default=0, metadata={"req_type": "json"}
    )  # 新增工作表的位置，不填默认往前增加工作表


@attr.s
class BatchUpdateSheetReqRequestAddSheet(object):
    properties: BatchUpdateSheetReqRequestAddSheetProperties = attr.ib(
        default=None, metadata={"req_type": "json"}
    )  # 工作表属性


@attr.s
class BatchUpdateSheetReqRequest(object):
    add_sheet: BatchUpdateSheetReqRequestAddSheet = attr.ib(
        default=None, metadata={"req_type": "json"}
    )  # 增加工作表
    copy_sheet: BatchUpdateSheetReqRequestCopySheet = attr.ib(
        default=None, metadata={"req_type": "json"}
    )  # 复制工作表
    delete_sheet: BatchUpdateSheetReqRequestDeleteSheet = attr.ib(
        default=None, metadata={"req_type": "json"}
    )  # 删除 sheet


@attr.s
class BatchUpdateSheetReq(object):
    spreadsheet_token: str = attr.ib(
        default="", metadata={"req_type": "path"}
    )  # spreadsheet 的 token，获取方式见[在线表格开发指南](https://open.feishu.cn/document/ukTMukTMukTM/uATMzUjLwEzM14CMxMTN/overview)
    requests: typing.List[BatchUpdateSheetReqRequest] = attr.ib(
        factory=lambda: [], metadata={"req_type": "json"}
    )  # 请求操作，支持增、删、复制工作表 ，三个操作选一个


@attr.s
class BatchUpdateSheetRespReplyDeleteSheet(object):
    result: bool = attr.ib(
        factory=lambda: bool(), metadata={"req_type": "json"}
    )  # 删除工作表是否成功
    sheet_id: str = attr.ib(default="", metadata={"req_type": "json"})  # sheetId


@attr.s
class BatchUpdateSheetRespReplyCopySheet(object):
    sheet_id: str = attr.ib(default="", metadata={"req_type": "json"})  # sheetId
    title: str = attr.ib(default="", metadata={"req_type": "json"})  # 工作表标题
    index: int = attr.ib(default=0, metadata={"req_type": "json"})  # 工作表位置


@attr.s
class BatchUpdateSheetRespReplyAddSheet(object):
    sheet_id: str = attr.ib(default="", metadata={"req_type": "json"})  # sheetId
    title: str = attr.ib(default="", metadata={"req_type": "json"})  # 工作表标题
    index: int = attr.ib(default=0, metadata={"req_type": "json"})  # 工作表位置


@attr.s
class BatchUpdateSheetRespReply(object):
    add_sheet: BatchUpdateSheetRespReplyAddSheet = attr.ib(
        default=None, metadata={"req_type": "json"}
    )  # 增加/复制工作表的属性
    copy_sheet: BatchUpdateSheetRespReplyCopySheet = attr.ib(
        default=None, metadata={"req_type": "json"}
    )  # 增加/复制工作表的属性
    delete_sheet: BatchUpdateSheetRespReplyDeleteSheet = attr.ib(
        default=None, metadata={"req_type": "json"}
    )  # 删除工作表


@attr.s
class BatchUpdateSheetResp(object):
    replies: typing.List[BatchUpdateSheetRespReply] = attr.ib(
        factory=lambda: [], metadata={"req_type": "json"}
    )  # 返回本次相关操作工作表的结果


def _gen_batch_update_sheet_req(request, options) -> RawRequestReq:
    return RawRequestReq(
        dataclass=BatchUpdateSheetResp,
        scope="Drive",
        api="BatchUpdateSheet",
        method="POST",
        url="https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/:spreadsheetToken/sheets_batch_update",
        body=request,
        method_option=_new_method_option(options),
        need_tenant_access_token=True,
        need_user_access_token=True,
    )
