use std::path::PathBuf;

use crate::parser::raws::{
    dimensions::Dimensions, info_txt::DFInfoFile, DFRawCommon, RawObjectKind,
};

impl super::DFTilePage {
    pub fn new(raw: &str, id: &str, info_text: &DFInfoFile) -> Self {
        Self {
            raw_header: DFRawCommon::from(id, raw, info_text, RawObjectKind::GraphicsTilePage),
            file: PathBuf::new(),
            page_dim: Dimensions::zero(),
            tile_dim: Dimensions::zero(),
        }
    }
    pub fn set_file(&mut self, file: &str) {
        self.file = file.split('/').collect();
    }
    pub fn set_tile_dim_from_token(&mut self, token: &str) {
        self.tile_dim = Dimensions::from_token(token);
    }
    pub fn set_page_dim_from_token(&mut self, token: &str) {
        self.page_dim = Dimensions::from_token(token);
    }
    pub fn get_raw_header(&self) -> &DFRawCommon {
        &self.raw_header
    }
    pub fn get_tile_dim(&self) -> Dimensions {
        self.tile_dim
    }

    pub fn get_page_dim(&self) -> Dimensions {
        self.page_dim
    }
    pub fn get_file_path(&self) -> String {
        let mut images_path = self.raw_header.dfraw_found_in.get_path();
        images_path.push(self.raw_header.get_dfraw_relative_path());
        images_path.push("graphics");
        images_path.push(self.file.as_path());

        images_path.into_os_string().to_string_lossy().to_string()
    }
}
