#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from Interfaces.OpoTestsInterface import OpoTestsInterface
from typing import Self, Any

class FormatModuleInterface:

    def __init__(self:Self, op:OpoTestsInterface) -> None:
        self.op:OpoTestsInterface = op

    def start(self:Self) -> None:pass

    @staticmethod
    def set_fragments_level(string:str, fragments:list[str]) -> str:pass
    
    @classmethod
    def build_fragments(cls:type[Self], string:str, fragments:list[str] = []) -> str:pass

    def execute(self:Self, 
        i:int, 
        string:str, 
        shared:dict[str, Any|None] = {}, 
        fragments:list[str] = []
    ) -> str:pass
    
    @staticmethod
    def prepare_result(string:str, option:str, shared:dict[str, Any|None]) -> int:pass
    
    def check(self:Self, 
        i:int, 
        string:str, 
        options:str|list[str], 
        shared:dict[str, Any|None] = {},
        fragments:list[str] = [], 
        check_full:bool = True
    ) -> tuple[bool, int]:pass
    
    def get_check_length(self:Self, 
        i:int, 
        string:str, 
        options:str|list[str], 
        shared:dict[str, Any|None] = {}, 
        fragments:list[str] = [], 
        check_full:bool = True
    ) -> int:pass
    
    def check_select(self:Self, 
        i:int, 
        string:str, 
        options:tuple[tuple[int, int], str, list[str]], 
        shared:dict[str, Any|None] = {}, 
        fragments:list[str] = []
    ) -> str|None:pass
    
    def get_list(self:Self, i:int, items:list[str]) -> list[str]:pass
    
    @staticmethod
    def check_range(string:str, inputs:str|list[str]) -> int:pass