import numpy as np
import json
from pathlib import Path
from ...common import PyProjectionGeometry, PyProjection, PyRegionOfIntrest


class BaseDataWriter():
    def __init__(self, 
                 porjection_geometry_suffix: str, 
                 projection_suffix: str,
                 region_of_intrest_suffix: str):
        
        self.porjection_geometry_suffix = porjection_geometry_suffix
        self.projection_suffix = projection_suffix
        self.region_of_intrest_suffix = region_of_intrest_suffix

    def write_projection_geometry(self, save_path: Path, projection_geometry: PyProjectionGeometry):
        raise NotImplementedError
    
    def write_projection(self, save_path: Path, projection: PyProjection):
        raise NotImplementedError
    
    def write_region_of_intrest(self, save_path: Path, region_of_intrest: PyRegionOfIntrest):
        raise NotImplementedError
    
    def get_projection_geometry_geometry_save_path(self, save_folder: Path, save_name: str) -> Path:
        raise NotImplementedError
    
    def get_projection_geometry_save_path(self, save_folder: Path, save_name: str) -> Path:
        raise NotImplementedError
    
    def get_region_of_intrest_save_path(self, save_folder: Path, save_name: str) -> Path:
        raise NotImplementedError
    
    def number_of_projection_geometries(self, folder: Path) -> int:
        return len(list(folder.glob(f'*{self.porjection_geometry_suffix}')))
    
    def number_of_projections(self, folder: Path) -> int:
        return self.number_of_projection_geometries(folder)