/*
**	Command & Conquer Generals Zero Hour(tm)
**	Copyright 2025 Electronic Arts Inc.
**
**	This program is free software: you can redistribute it and/or modify
**	it under the terms of the GNU General Public License as published by
**	the Free Software Foundation, either version 3 of the License, or
**	(at your option) any later version.
**
**	This program is distributed in the hope that it will be useful,
**	but WITHOUT ANY WARRANTY; without even the implied warranty of
**	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
**	GNU General Public License for more details.
**
**	You should have received a copy of the GNU General Public License
**	along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

// BabylonDlg.h : header file
//

#if !defined(AFX_BABYLONDLG_H__2BF3124D_3BA1_11D3_B9DA_006097B90D93__INCLUDED_)
#define AFX_BABYLONDLG_H__2BF3124D_3BA1_11D3_B9DA_006097B90D93__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "resource.h"
#include "transdb.h"

typedef enum 
{	
	SAME_LINE,
	NEW_LINE

} LogFormat;


typedef struct
{
	int new_strings;
	int deleted_strings;
	int modified_strings;
	int new_labels;
	int deleted_labels;
	int modified_labels;
	int skipped_labels;
	int updated_comments;
	int updated_contexts;
	int updated_waves;
	int updated_speakers;
	int updated_listeners;
	int updated_maxlen;
	int changes;



} UPDATEINFO;

class CBabylonDlgAutoProxy;

/////////////////////////////////////////////////////////////////////////////
// CBabylonDlg dialog

class CBabylonDlg : public CDialog
{
	DECLARE_DYNAMIC(CBabylonDlg);
	friend class CBabylonDlgAutoProxy;
	CProgressCtrl *progress;
	CStatic *percent;
	int progress_pos;
	int progress_range;
	int max_index;
	CComboBox *combo;
	int operate_always;



// Construction
public:
	int ValidateStrFile ( const char *filename );
	int MatchText ( BabylonText *text, BabylonLabel *label, BabylonText **match );
	int RetranslateText ( BabylonText *text, BabylonText *label );
	void VerifyDialog( TransDB *db, LangID langid);
	void VerifyTranslations( TransDB *db, LangID langid ) ;
	int	CanProceed ( void );
	int	CanOperate ( void );
	int SaveMainDB ( void );
	int UpdateLabel ( BabylonLabel *source, BabylonLabel *destination, UPDATEINFO &info, int update = TRUE, int skip = FALSE);
	int UpdateDB ( TransDB *source, TransDB *destination, int update = TRUE);
	void ProgressComplete ( void );
	void SetProgress ( int pos );
	void InitProgress ( int range );
	int SaveLog ( void );
	void Status ( const char *string, int log = TRUE);
	void Log ( const char *string, LogFormat format = NEW_LINE );
	CBabylonDlg(CWnd* pParent = NULL);	// standard constructor
	virtual ~CBabylonDlg();
	int LoadStrFile ( TransDB *db, const char *fileaname, void (*cb ) (void ) = NULL );
	void Ready ( void ) { Status ( "Ready", FALSE ); ProgressComplete(); };

// Dialog Data
	//{{AFX_DATA(CBabylonDlg)
	enum { IDD = IDD_BABYLON_DIALOG };
		// NOTE: the ClassWizard will add data members here
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CBabylonDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	CBabylonDlgAutoProxy* m_pAutoProxy;
	HICON m_hIcon;

	BOOL CanExit();

	// Generated message map functions
	//{{AFX_MSG(CBabylonDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnClose();
	afx_msg void OnDropFiles(HDROP hDropInfo);
	afx_msg void OnViewdbs();
	afx_msg void OnReload();
	afx_msg void OnUpdate();
	afx_msg void OnSave();
	afx_msg void OnWarnings();
	afx_msg void OnErrors();
	afx_msg void OnChanges();
	afx_msg void OnExport();
	afx_msg void OnImport();
	afx_msg void OnGenerate();
	afx_msg void OnVerifyDialog();
	afx_msg void OnTranslations();
	afx_msg void OnSelchangeCombolang();
	afx_msg void OnReports();
	afx_msg void OnDblclkCombolang();
	afx_msg void OnReset();
	afx_msg void OnSent();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

extern CBabylonDlg *MainDLG;

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_BABYLONDLG_H__2BF3124D_3BA1_11D3_B9DA_006097B90D93__INCLUDED_)
