import logging

from spacepackets.cfdp import ConditionCode
from tmtccmd.cfdp import CfdpUserBase, TransactionId
from tmtccmd.cfdp.user import (
    TransactionFinishedParams,
    MetadataRecvParams,
    FileSegmentRecvdParams,
)

_LOGGER = logging.getLogger(__name__)


class EiveCfdpUser(CfdpUserBase):
    def transaction_indication(self, transaction_id: TransactionId):
        _LOGGER.info(f"CFDP User: Start of File {transaction_id}")

    def eof_sent_indication(self, transaction_id: TransactionId):
        _LOGGER.info(f"CFDP User: EOF sent for {transaction_id}")

    def transaction_finished_indication(self, params: TransactionFinishedParams):
        _LOGGER.info(f"CFDP User: {params.transaction_id} finished")
        _LOGGER.info(f"Delivery Code: {params.delivery_code!r}")
        _LOGGER.info(f"Condition code: {params.condition_code!r}")
        _LOGGER.info(f"File delivery status: {params.delivery_code!r}")

    def metadata_recv_indication(self, params: MetadataRecvParams):
        pass

    def file_segment_recv_indication(self, params: FileSegmentRecvdParams):
        _LOGGER.info(
            f"CFDP User: Received File Data PDU for {params.transaction_id} | Offset:"
            f" {params.offset} | Segment Length: {params.length}"
        )

    def report_indication(self, transaction_id: TransactionId, status_report: any):
        pass

    def suspended_indication(
        self, transaction_id: TransactionId, cond_code: ConditionCode
    ):
        pass

    def resumed_indication(self, transaction_id: TransactionId, progress: int):
        pass

    def fault_indication(
        self, transaction_id: TransactionId, cond_code: ConditionCode, progress: int
    ):
        pass

    def abandoned_indication(
        self, transaction_id: TransactionId, cond_code: ConditionCode, progress: int
    ):
        pass

    def eof_recv_indication(self, transaction_id: TransactionId):
        _LOGGER.info(f"CFDP User: EOF received for {transaction_id}")