class EnglishToHindiPipeline:
    def __init__(self, project_dir):
        self.project_dir = Path(project_dir)
        self.setup_directories()
        
        # Initialize processors
        self.video_processor = VideoProcessor(
            self.project_dir / "input_videos",
            self.project_dir / "extracted_audio"
        )
        self.transcription_processor = TranscriptionProcessor()
        self.audio_analyzer = AudioAnalyzer()
    
    def setup_directories(self):
        """Create project directory structure"""
        dirs = ['input_videos', 'extracted_audio', 'transcripts', 'cleaned_audio', 'analysis']
        for dir_name in dirs:
            (self.project_dir / dir_name).mkdir(exist_ok=True)
    
    def process_single_video(self, video_file):
        """Complete processing pipeline for one video"""
        print(f"Processing video: {video_file.name}")
        
        # Step 1: Extract audio
        audio_file = self.video_processor.extract_audio(video_file)
        print(f"✓ Audio extracted: {audio_file}")
        
        # Step 2: Analyze audio
        analysis = self.audio_analyzer.analyze_audio_properties(audio_file)
        print(f"✓ Audio analysis complete")
        
        # Step 3: Clean audio
        cleaned_audio = self.project_dir / "cleaned_audio" / f"{video_file.stem}_cleaned.wav"
        self.audio_analyzer.clean_audio(audio_file, cleaned_audio)
        print(f"✓ Audio cleaned: {cleaned_audio}")
        
        # Step 4: Transcribe
        transcript = self.transcription_processor.transcribe_with_timestamps(cleaned_audio)
        print(f"✓ Transcription complete")
        
        # Step 5: Create SRT file
        srt_file = self.project_dir / "transcripts" / f"{video_file.stem}.srt"
        self.transcription_processor.create_srt_file(transcript, srt_file)
        print(f"✓ SRT file created: {srt_file}")
        
        # Step 6: Extract technical terms
        terms = self.transcription_processor.extract_technical_terms(transcript)
        terms_file = self.project_dir / "analysis" / f"{video_file.stem}_terms.json"
        with open(terms_file, 'w') as f:
            json.dump(terms, f, indent=2)
        print(f"✓ Technical terms extracted: {len(terms)} terms")
        
        return {
            'video_file': video_file,
            'audio_file': audio_file,
            'cleaned_audio': cleaned_audio,
            'transcript': transcript,
            'srt_file': srt_file,
            'technical_terms': terms,
            'analysis': analysis
        }
    
    def process_all_videos(self):
        """Process all videos in the input directory"""
        results = []
        input_dir = self.project_dir / "input_videos"
        
        for video_file in input_dir.glob("*.mp4"):
            result = self.process_single_video(video_file)
            results.append(result)
        
        return results

# Usage example
if __name__ == "__main__":
    pipeline = EnglishToHindiPipeline("./hindi_dubbing_project")
    results = pipeline.process_all_videos()
    
    print(f"\n✅ Processing complete! {len(results)} videos processed.")