"""
The file which does the all work. Calling all the pipeline to do the training.
"""

from src.TextSummarizer.logger import backend_logger
from src.TextSummarizer.pipeline.step_01_data_ingestion import DataIngestionPipeline
from src.TextSummarizer.pipeline.step_02_data_validation import DataValidationPipeline
from src.TextSummarizer.pipeline.step_03_data_transformation import (
    DataTransformationPipeline,
)
from src.TextSummarizer.pipeline.step_04_train_model import ModelTrainerPipeline
from src.TextSummarizer.pipeline.step_05_model_evaluation import ModelEvaluationPipeline

stage_name_01: str = "Stage 1: Data Integration Stage"
stage_name_02: str = "Stage 2: Data Validation Stage"
stage_name_03: str = "Stage 3: Data Transformation Stage"
stage_name_04: str = "Stage 4: Model training Stage"
stage_name_05: str = "Stage 5: Model Evaluation Stage"


line_msg: str = "="*100

try:
    backend_logger.info(line_msg)
    backend_logger.info(f"Stage {stage_name_01} started")
    DataIngestionPipeline().run()
    backend_logger.info(f"Stage {stage_name_01} completed.")
    backend_logger.info(line_msg)
except Exception as err:
    backend_logger.error(f"Data ingestion pipeline failed. Reason: {err}")


try:
    backend_logger.info(line_msg)
    backend_logger.info(f"Stage {stage_name_02} started")
    DataValidationPipeline().run()
    backend_logger.info(f"Stage {stage_name_02} completed.")
    backend_logger.info(line_msg)
except Exception as err:
    backend_logger.error(f"Data validation pipeline failed. Reason: {err}")


try:
    backend_logger.info(line_msg)
    backend_logger.info(f"Stage {stage_name_03} started")
    DataTransformationPipeline().run()
    backend_logger.info(f"Stage {stage_name_03} completed.")
    backend_logger.info(line_msg)
except Exception as err:
    backend_logger.error(f"Data Transformation pipeline failed. Reason: {err}")


# For the device limitations issues, i have trained the model on online and stored the model in huggingface profile.
# We can skip the training and model evaluation steps while running locally.


try:
    backend_logger.info(line_msg)
    backend_logger.info(f"Stage {stage_name_04} started")
    ModelTrainerPipeline().run()
    backend_logger.info(f"Stage {stage_name_04} completed.")
    backend_logger.info(line_msg)
except Exception as err:
    backend_logger.error(f"Data data training pipeline failed. Reason: {err}")


try:
    backend_logger.info(line_msg)
    backend_logger.info(f"Stage {stage_name_05} started")
    ModelEvaluationPipeline().run()
    backend_logger.info(f"Stage {stage_name_05} completed.")
    backend_logger.info(line_msg)
except Exception as err:
    backend_logger.error(f"Model evaluation pipeline failed. Reason: {err}")