# Copyright © The Debusine Developers
# See the AUTHORS file at the top-level directory of this distribution
#
# This file is part of Debusine. It is subject to the license terms
# in the LICENSE file found in the top-level directory of this
# distribution. No part of Debusine, including this file, may be copied,
# modified, propagated, or distributed except according to the terms
# contained in the LICENSE file.

"""Wait task to block until a user provides a signature for an upload."""

from typing import override

from debusine.client.models import LookupChildType
from debusine.server.tasks.wait import BaseWaitTask
from debusine.server.tasks.wait.models import (
    ExternalDebsignData,
    ExternalDebsignDynamicData,
)


class ExternalDebsign(
    BaseWaitTask[ExternalDebsignData, ExternalDebsignDynamicData]
):
    """Task that requests and waits for an external signature for an upload."""

    TASK_VERSION = 1

    @override
    def compute_dynamic_data(self) -> ExternalDebsignDynamicData:
        unsigned = self.work_request.lookup_single(
            self.data.unsigned, expect_type=LookupChildType.ARTIFACT
        ).artifact
        return ExternalDebsignDynamicData(unsigned_id=unsigned.id)

    @override
    def get_label(self) -> str:
        return f"wait for external debsign for {self.data.unsigned}"
