using Gtk;

class ThemeConfigWindow : ApplicationWindow {
	Label selectbg_label;
	Label selectfg_label;

	ColorButton selectbg_button;
	ColorButton selectfg_button;
	ColorButton panelbg_button;
	ColorButton panelfg_button;
	ColorButton menubg_button;
	ColorButton menufg_button;

	Switch select_switch;
	Switch panel_switch;
	Switch menu_switch;

	Button revert_button;
	Button apply_button;

	Gdk.RGBA color_rgb;

	File config_dir;
	File home_dir;

	File gtk3_config_file;
	File gtk2_config_file;

	File theme_path;

	string color_hex;

	string color_scheme;

	string selectbg_value;
	string selectfg_value;
	string panelbg_value;
	string panelfg_value;
	string menubg_value;
	string menufg_value;

	internal ThemeConfigWindow (ThemeConfigApp app) {
		Object (application: app, title: "Tema Yapılandırması");

		// Set window properties
		this.window_position = WindowPosition.CENTER;
		this.resizable = false;
		this.border_width = 10;

		// Set window icon
		try {
			this.icon = IconTheme.get_default ().load_icon ("gtk-theme-config", 48, 0);
		} catch (Error e) {
			stderr.printf ("Uygulama simgesi yüklenemedi: %s\n", e.message);
		}

		// Methods
		create_widgets ();
		connect_signals ();
	}

	void set_values () {

		// Set default values
		selectbg_value = "#398ee7";
		selectfg_value = "#eeeeee";
		panelbg_value = "#cccccc";
		panelfg_value = "#333333";
		menubg_value = "#eeeeee";
		menufg_value = "#333333";

		select_switch.set_active (false);
		panel_switch.set_active (false);
		menu_switch.set_active (false);

		// Read the current values
		var settings = new GLib.Settings ("org.gnome.desktop.interface");
		var color_scheme = settings.get_string ("gtk-color-scheme");
		var theme_name = settings.get_string ("gtk-theme");

		// Set paths of config files
		config_dir = File.new_for_path (Environment.get_user_config_dir ());
		home_dir = File.new_for_path (Environment.get_home_dir ());

		gtk3_config_file = config_dir.get_child ("gtk-3.0").get_child ("gtk.css");

		gtk2_config_file = home_dir.get_child (".gtkrc-2.0");

		// Create path if doesn't exist
		if (!gtk3_config_file.get_parent().query_exists ()) {
			try {
				gtk3_config_file.get_parent().make_directory_with_parents(null);
			} catch (Error e) {
				stderr.printf ("Üst dizin oluşturulamadı: %s\n", e.message);
			}
		}

		// Detect current theme path
		if (gtk3_config_file.query_exists ()) {
			theme_path = gtk3_config_file;
		} else if (home_dir.get_child (".themes/%s/gtk-3.0/gtk-main.css".printf (theme_name)).query_exists ()) {
			theme_path = home_dir.get_child (".themes/%s/gtk-3.0/gtk-main.css".printf (theme_name));
		} else if (home_dir.get_child (".themes/%s/gtk-3.0/gtk.css".printf (theme_name)).query_exists ()) {
			theme_path = home_dir.get_child (".themes/%s/gtk-3.0/gtk.css".printf (theme_name));
		} else if (File.parse_name ("/usr/share/themes/%s/gtk-3.0/gtk-main.css".printf (theme_name)).query_exists ()) {
			theme_path = File.parse_name ("/usr/share/themes/%s/gtk-3.0/gtk-main.css".printf (theme_name));
		} else if (File.parse_name ("/usr/share/themes/%s/gtk-3.0/gtk.css".printf (theme_name)).query_exists ()) {
			theme_path = File.parse_name ("/usr/share/themes/%s/gtk-3.0/gtk.css".printf (theme_name));
		}

		// Read the current theme file
		try {
			var dis = new DataInputStream (theme_path.read ());
			string line;
			while ((line = dis.read_line (null)) != null) {
				if ("@define-color selected_bg_color" in line) {
					selectbg_value = line.substring (32, line.length-33);
					if ("@" in selectbg_value) {
						selectbg_value = "#398ee7";
					}
				}
				if ("@define-color selected_fg_color" in line) {
					selectfg_value = line.substring (32, line.length-33);
					if ("@" in selectfg_value) {
						selectfg_value = "#eeeeee";
					}
				}
				if ("@define-color panel_bg_color" in line) {
					panelbg_value = line.substring (29, line.length-30);
					if ("@" in panelbg_value) {
						panelbg_value = "#cccccc";
					}
				}
				if ("@define-color panel_fg_color" in line) {
					panelfg_value = line.substring (29, line.length-30);
					if ("@" in panelfg_value) {
						panelfg_value = "#333333";
					}
				}
				if ("@define-color menu_bg_color" in line) {
					menubg_value = line.substring (28, line.length-29);
					if ("@" in menubg_value) {
						menubg_value = "#eeeeee";
					}
				}
				if ("@define-color menu_fg_color" in line) {
					menufg_value = line.substring (28, line.length-29);
					if ("@" in menufg_value) {
						menufg_value = "#333333";
					}
				}
				if ("/* select-on */" in line) {
					select_switch.set_active (true);
				}
				if ("/* panel-on */" in line) {
					panel_switch.set_active (true);
				}
				if ("/* menu-on */" in line) {
					menu_switch.set_active (true);
				}
			}
		} catch (Error e) {
			stderr.printf ("Kullanıcı teması okunamadı: %s\n", e.message);
		}

		// Read the current color scheme
		if (";" in color_scheme) {
			string[] parts = color_scheme.split_set(";");
			if ("selected_bg_color:#" in parts[0] && "selected_fg_color:#" in parts[1]) {
				selectbg_value = parts[0].substring (18, parts[0].length-18);
				selectfg_value = parts[1].substring (18, parts[1].length-18);
				select_switch.set_active (true);
			}
		}

		// Set colors
		Gdk.RGBA color = Gdk.RGBA ();
		color.parse (selectbg_value);
		selectbg_button.set_rgba (color);
		color.parse (selectfg_value);
		selectfg_button.set_rgba (color);
		color.parse (panelbg_value);
		panelbg_button.set_rgba (color);
		color.parse (panelfg_value);
		panelfg_button.set_rgba (color);
		color.parse (menubg_value);
		menubg_button.set_rgba (color);
		color.parse (menufg_value);
		menufg_button.set_rgba (color);

		apply_button.set_sensitive (false);
	}

	void create_widgets () {
		// Create and setup widgets
		var select_heading = new Label.with_mnemonic ("_<b>Özel vurgu renkleri</b>");
		select_heading.set_use_markup (true);
		select_heading.set_halign (Align.START);
		var panel_heading = new Label.with_mnemonic ("_<b>Özel panel renkleri/b>");
		panel_heading.set_use_markup (true);
		panel_heading.set_halign (Align.START);
		var menu_heading = new Label.with_mnemonic ("_<b>Özel menü renkleri</b>");
		menu_heading.set_use_markup (true);
		menu_heading.set_halign (Align.START);

		selectbg_label = new Label.with_mnemonic ("_Arka planı vurgulayın");
		selectbg_label.set_halign (Align.START);
		selectfg_label = new Label.with_mnemonic ("_Metni vurgulayın");
		selectfg_label.set_halign (Align.START);
		var panelbg_label = new Label.with_mnemonic ("_Panel arka planı");
		panelbg_label.set_halign (Align.START);
		var panelfg_label = new Label.with_mnemonic ("_Panel metni");
		panelfg_label.set_halign (Align.START);
		var menubg_label = new Label.with_mnemonic ("_Menü arkaplanı");
		menubg_label.set_halign (Align.START);
		var menufg_label = new Label.with_mnemonic ("_Menü Metni");
		menufg_label.set_halign (Align.START);

		selectbg_button = new ColorButton ();
		selectfg_button = new ColorButton ();
		panelbg_button = new ColorButton ();
		panelfg_button = new ColorButton ();
		menubg_button = new ColorButton ();
		menufg_button = new ColorButton ();

		select_switch = new Switch ();
		select_switch.set_halign (Align.END);
		panel_switch = new Switch ();
		panel_switch.set_halign (Align.END);
		menu_switch = new Switch ();
		menu_switch.set_halign (Align.END);

		revert_button = new Button.from_stock(Stock.REVERT_TO_SAVED);
		apply_button = new Button.from_stock (Stock.APPLY);

		// Buttons
		var buttons = new ButtonBox (Orientation.HORIZONTAL);
		buttons.set_layout (ButtonBoxStyle.EDGE);
		buttons.add (revert_button);
		buttons.add (apply_button);

		// Layout widgets
		var grid = new Grid ();
		grid.set_column_homogeneous (true);
		grid.set_row_homogeneous (true);
		grid.set_column_spacing (5);
		grid.set_row_spacing (5);
		grid.attach (select_heading, 0, 0, 1, 1);
		grid.attach_next_to (select_switch, select_heading, PositionType.RIGHT, 1, 1);
		grid.attach (selectbg_label, 0, 1, 1, 1);
		grid.attach_next_to (selectbg_button, selectbg_label, PositionType.RIGHT, 1, 1);
		grid.attach (selectfg_label, 0, 2, 1, 1);
		grid.attach_next_to (selectfg_button, selectfg_label, PositionType.RIGHT, 1, 1);
		grid.attach (panel_heading, 0, 3, 1, 1);
		grid.attach_next_to (panel_switch, panel_heading, PositionType.RIGHT, 1, 1);
		grid.attach (panelbg_label, 0, 4, 1, 1);
		grid.attach_next_to (panelbg_button, panelbg_label, PositionType.RIGHT, 1, 1);
		grid.attach (panelfg_label, 0, 5, 1, 1);
		grid.attach_next_to (panelfg_button, panelfg_label, PositionType.RIGHT, 1, 1);
		grid.attach (menu_heading, 0, 6, 1, 1);
		grid.attach_next_to (menu_switch, menu_heading, PositionType.RIGHT, 1, 1);
		grid.attach (menubg_label, 0, 7, 1, 1);
		grid.attach_next_to (menubg_button, menubg_label, PositionType.RIGHT, 1, 1);
		grid.attach (menufg_label, 0, 8, 1, 1);
		grid.attach_next_to (menufg_button, menufg_label, PositionType.RIGHT, 1, 1);
		grid.attach (buttons, 0, 9, 2, 1);

		this.add (grid);

		set_values ();
	}

	void connect_signals () {
		selectbg_button.color_set.connect (() => {
			on_selectbg_color_set ();
			apply_button.set_sensitive (true);
		});
		selectfg_button.color_set.connect (() => {
			on_selectfg_color_set ();
			apply_button.set_sensitive (true);
		});
		panelbg_button.color_set.connect (() => {
			on_panelbg_color_set ();
			apply_button.set_sensitive (true);
		});
		panelfg_button.color_set.connect (() => {
			on_panelfg_color_set ();
			apply_button.set_sensitive (true);
		});
		menubg_button.color_set.connect (() => {
			on_menubg_color_set ();
			apply_button.set_sensitive (true);
		});
		menufg_button.color_set.connect (() => {
			on_menufg_color_set ();
			apply_button.set_sensitive (true);
		});
		select_switch.notify["active"].connect (() => {
			apply_button.set_sensitive (true);
		});
		panel_switch.notify["active"].connect (() => {
			apply_button.set_sensitive (true);
		});
		menu_switch.notify["active"].connect (() => {
			apply_button.set_sensitive (true);
		});
		revert_button.clicked.connect (() => {
			on_config_reset ();
			revert_button.set_sensitive (false);
		});
		apply_button.clicked.connect (() => {
			on_config_set ();
			apply_button.set_sensitive (false);
			revert_button.set_sensitive (true);
		});
	}

	void rgb_to_hex () {
		int r = (int)Math.round (color_rgb.red * 255);
		int g = (int)Math.round (color_rgb.green * 255);
		int b = (int)Math.round (color_rgb.blue * 255);

		color_hex = "#%02x%02x%02x".printf (r, g, b);
	}

	void on_selectbg_color_set () {
		color_rgb =  selectbg_button.get_rgba ();
		rgb_to_hex ();
		selectbg_value = color_hex;
	}

	void on_selectfg_color_set () {
		color_rgb =  selectfg_button.get_rgba ();
		rgb_to_hex ();
		selectfg_value = color_hex;
	}

	void on_panelbg_color_set () {
		color_rgb =  panelbg_button.get_rgba ();
		rgb_to_hex ();
		panelbg_value = color_hex;
	}

	void on_panelfg_color_set () {
		color_rgb =  panelfg_button.get_rgba ();
		rgb_to_hex ();
		panelfg_value = color_hex;
	}

	void on_menubg_color_set () {
		color_rgb =  menubg_button.get_rgba ();
		rgb_to_hex ();
		menubg_value = color_hex;
	}

	void on_menufg_color_set () {
		color_rgb =  menufg_button.get_rgba ();
		rgb_to_hex ();
		menufg_value = color_hex;
	}

	void on_config_set () {
		set_color_scheme ();
		write_config ();
		notify_change ();
	}

	void on_config_reset () {
		reset_color_scheme ();
		reset_config ();
		set_values ();
		notify_change ();
	}

	void set_color_scheme () {
		// Determine color scheme
		if (select_switch.get_active()) {
			color_scheme = "\"selected_bg_color:%s;selected_fg_color:%s;\"".printf (selectbg_value, selectfg_value);
		} else {
			color_scheme = "\"\"";
		}

		// Set color scheme
		try {
			Process.spawn_command_line_sync ("gsettings set org.gnome.desktop.interface gtk-color-scheme %s".printf (color_scheme));
		} catch (Error e) {
			stderr.printf ("Could not set color scheme for gtk3: %s\n", e.message);
		}
		try {
			Process.spawn_command_line_sync ("gconftool-2 -s /desktop/gnome/interface/gtk_color_scheme -t string %s".printf (color_scheme));
		} catch (Error e) {
			stderr.printf ("Could not set color scheme for gtk2: %s\n", e.message);
		}
		if (File.parse_name ("/usr/bin/xfconf-query").query_exists ()) {
			try {
				Process.spawn_command_line_sync ("xfconf-query -n -c xsettings -p /Gtk/ColorScheme -t string -s %s".printf (color_scheme));
			} catch (Error e) {
				stderr.printf ("Could not set color scheme for xfce: %s\n", e.message);
			}
		}
	}

	void reset_color_scheme () {
		try {
			Process.spawn_command_line_sync ("gsettings reset org.gnome.desktop.interface gtk-color-scheme");
		} catch (Error e) {
			stderr.printf ("CGtk3 için renk düzenini sıfırlayamadı: %s\n", e.message);
		}
		try {
			Process.spawn_command_line_sync ("gconftool-2 -u /desktop/gnome/interface/gtk_color_scheme");
		} catch (Error e) {
			stderr.printf ("Gtk2 için renk düzenini sıfırlayamadı: %s\n", e.message);
		}
		if (File.parse_name ("/usr/bin/xfconf-query").query_exists ()) {
			try {
				Process.spawn_command_line_sync ("xfconf-query -c xsettings -p /Gtk/ColorScheme -r");
			} catch (Error e) {
				stderr.printf ("Cxfce için renk düzenini sıfırlayamadı: %s\n", e.message);
			}
		}
	}
			
	void reset_config () {
		try {
			if (gtk3_config_file.query_exists ()) {
				gtk3_config_file.delete ();
			}
		} catch (Error e) {
			stderr.printf ("Önceki gtk3 yapılandırması silinemiyor: %s\n", e.message);
		}
		try {
			if (gtk2_config_file.query_exists ()) {
				gtk2_config_file.delete ();
			}
		} catch (Error e) {
			stderr.printf ("Önceki gtk2 yapılandırması silinemiyor: %s\n", e.message);
		}
	}

	void write_config () {
		
		// Determine states
		string select_state1;
		string select_state2;
		string panel_state1;
		string panel_state2;
		string menu_state1;
		string menu_state2;

		string panel_gtk2;
		string menu_gtk2;

		if (select_switch.get_active()) {
			select_state1 = "/* select-on */";
			select_state2 = "/* select-on */";
		} else {
			select_state1 = "/* select-off";
			select_state2 = "select-off */";
		}
		if (panel_switch.get_active()) {
			panel_state1 = "/* panel-on */";
			panel_state2 = "/* panel-on */";
			panel_gtk2 = ("style \"gtk-theme-config-panel\" {\n" +
					"\tbg[NORMAL] = \"%s\"\n" +
					"\tbg[PRELIGHT] = shade(1.1,\"%s\")\n" +
					"\tbg[ACTIVE] = shade(0.9,\"%s\")\n" +
					"\tbg[SELECTED] = shade(0.97,\"%s\")\n" +
					"\tfg[NORMAL] = \"%s\"\n" +
					"\tfg[PRELIGHT] = \"%s\"\n" +
					"\tfg[SELECTED] = \"%s\"\n" +
					"\tfg[ACTIVE] = \"%s\"\n" +
					"}\n\n" +
					"widget \"*PanelWidget*\" style \"gtk-theme-config-panel\"\n" +
					"widget \"*PanelApplet*\" style \"gtk-theme-config-panel\"\n" +
					"widget \"*fast-user-switch*\" style \"gtk-theme-config-panel\"\n" +
					"widget \"*CPUFreq*Applet*\" style \"gtk-theme-config-panel\"\n" +
					"widget \"*indicator-applet*\" style \"gtk-theme-config-panel\"\n" +
					"class \"PanelApp*\" style \"gtk-theme-config-panel\"\n" +
					"class \"PanelToplevel*\" style \"gtk-theme-config-panel\"\n" +
					"widget_class \"*PanelToplevel*\" style \"gtk-theme-config-panel\"\n" +
					"widget_class \"*notif*\" style \"gtk-theme-config-panel\"\n" +
					"widget_class \"*Notif*\" style \"gtk-theme-config-panel\"\n" +
					"widget_class \"*Tray*\" style \"gtk-theme-config-panel\" \n" +
					"widget_class \"*tray*\" style \"gtk-theme-config-panel\"\n" +
					"widget_class \"*computertemp*\" style \"gtk-theme-config-panel\"\n" +
					"widget_class \"*Applet*Tomboy*\" style \"gtk-theme-config-panel\"\n" +
					"widget_class \"*Applet*Netstatus*\" style \"gtk-theme-config-panel\"\n" +
					"widget \"*gdm-user-switch-menubar*\" style \"gtk-theme-config-panel\"\n" +
					"widget \"*Xfce*Panel*\" style \"gtk-theme-config-panel\"\n" +
					"class \"*Xfce*Panel*\" style \"gtk-theme-config-panel\"\n").printf (panelbg_value, panelbg_value, panelbg_value, panelbg_value, panelfg_value, panelfg_value, panelfg_value, panelfg_value);
		} else {
			panel_state1 = "/* panel-off";
			panel_state2 = "panel-off */";
			panel_gtk2 = "";
		}
		if (menu_switch.get_active()) {
			menu_state1 = "/* menu-on */";
			menu_state2 = "/* menu-on */";
			menu_gtk2 = ("style \"gtk-theme-config-menu\" {\n" +
					"\tbase[NORMAL] = \"%s\"\n" +
					"\tbg[NORMAL] = \"%s\"\n" +
					"\tbg[ACTIVE] = \"%s\"\n" +
					"\tbg[INSENSITIVE] = \"%s\"\n" +
					"\ttext[NORMAL] = \"%s\"\n" +
					"\tfg[NORMAL] = \"%s\"\n" +
					"}\n\n" +
					"widget_class\"*<GtkMenu>*\"style\"gtk-theme-config-menu\"\n").printf (menubg_value, menubg_value, menubg_value, menubg_value, menufg_value, menufg_value);
		} else {
			menu_state1 = "/* menu-off";
			menu_state2 = "menu-off */";;
			menu_gtk2 = "";
		}

		// Write config
		try {
			var dos = new DataOutputStream (gtk3_config_file.replace (null, false, FileCreateFlags.REPLACE_DESTINATION));
			dos.put_string ("/* Custom styles */\n\n");
			string text = ("%s\n" +
					"@define-color selected_bg_color %s;\n" +
					"@define-color selected_fg_color %s;\n" +
					"@define-color theme_selected_bg_color @selected_bg_color;\n" +
					"@define-color theme_selected_fg_color @selected_fg_color;\n" +
					"%s\n\n" +
					"%s\n" +
					"@define-color panel_bg_color %s;\n" +
					"@define-color panel_fg_color %s;\n\n" +
					"PanelWidget,\n" +
					"PanelApplet,\n" +
					"PanelToplevel,\n" +
					"PanelSeparator,\n" +
					"PanelApplet > GtkMenuBar.menubar,\n" +
					"PanelApplet > GtkMenuBar.menubar.menuitem,\n" +
					"PanelMenuBar.menubar,\n" +
					"PanelMenuBar.menubar.menuitem,\n" +
					"PanelAppletFrame,\n" +
					"UnityPanelWidget,\n" +
					".gnome-panel-menu-bar,\n" +
					".unity-panel {\n" +
					"\tbackground-image: -gtk-gradient(linear,left top,left bottom,from(shade(@panel_bg_color,1.2)),to(shade(@panel_bg_color,0.8)));\n" +
					"\tcolor: @panel_fg_color;\n" +
					"}\n\n" +
					".unity-panel.menuitem,\n" +
					".unity-panel .menuitem {\n" +
					"\tcolor: @panel_fg_color;\n" +
					"}\n\n" +
					".unity-panel.menubar.menuitem:hover,\n" +
					".unity-panel.menubar .menuitem *:hover {\n" +
					"\tborder-color: shade(@panel_bg_color, 0.7);\n" +
					"\tborder-image: none;\n" +
					"\tbackground-image: -gtk-gradient(linear,left top,left bottom,from(shade(@panel_bg_color, 0.97)),to(shade(@panel_bg_color, 0.82)));\n" +
					"\tcolor: @panel_fg_color;\n" +
					"}\n\n" +
					"PanelApplet .button {\n" +
					"\tborder-color: transparent;\n" +
					"\tborder-image: none;\n" +
					"\tbackground-image: -gtk-gradient(linear,left top,left bottom,from(shade(@panel_bg_color,1.2)),to(shade(@panel_bg_color,0.8)));\n" +
					"\tcolor: @panel_fg_color;\n" +
					"\tbox-shadow: none;\n" +
					"\ttext-shadow: none;\n" +
					"\t-unico-inner-stroke-width: 0;\n" +
					"}\n\n" +
					"PanelApplet .button:active {\n" +
					"\tborder-color: shade(@panel_bg_color,0.8);\n" +
					"\tborder-image: none;\n" +
					"\tbackground-image: -gtk-gradient(linear,left top,left bottom,from(shade(shade(@panel_bg_color,1.02),0.9)),to(shade(shade(@panel_bg_color,1.02),0.95)));\n" +
					"\tcolor: @panel_fg_color;\n" +
					"\tbox-shadow: none;\n" +
					"\ttext-shadow: none;\n" +
					"\t-unico-inner-stroke-width: 0;\n" +
					"}\n\n" +
					"PanelApplet .button:prelight {\n" +
					"\tborder-color: transparent;\n" +
					"\tborder-image: none;\n" +
					"\tbackground-image: -gtk-gradient(linear,left top,left bottom,from(shade(@panel_bg_color,1.2)),to(shade(@panel_bg_color,1.0)));\n" +
					"\tcolor: @panel_fg_color;\n" +
					"\tbox-shadow: none;\n" +
					"\ttext-shadow: none;\n" +
					"\t-unico-inner-stroke-width: 0;\n" +
					"}\n\n" +
					"PanelApplet .button:active:prelight {\n" +
					"\tborder-color: shade(@panel_bg_color,0.8);\n" +
					"\tborder-image: none;\n" +
					"\tbackground-image: -gtk-gradient(linear,left top,left bottom,from(shade(shade(@panel_bg_color,1.02),1.0)),to(shade(shade(@panel_bg_color,1.02),1.05)));\n" +
					"\tcolor: @panel_fg_color;\n" +
					"\tbox-shadow: none;\n" +
					"\ttext-shadow: none;\n" +
					"\t-unico-inner-stroke-width: 0;\n" +
					"}\n\n" +
					"WnckPager,\n" +
					"WnckTasklist {\n" +
					"\tbackground-color: @panel_bg_color;\n" +
					"}\n\n" +
					"%s\n\n" +
					"%s\n" +
					"@define-color menu_bg_color %s;\n" +
					"@define-color menu_fg_color %s;\n\n" +
					"GtkTreeMenu.menu,\n" +
					"GtkMenuToolButton.menu,\n" +
					"GtkComboBox .menu {\n" +
					"\tbackground-color: @menu_bg_color;\n" +
					"}\n\n" +
					".primary-toolbar .button .menu,\n" +
					".toolbar .menu,\n" +
					".toolbar .primary-toolbar .menu,\n" +
					".menu {\n" +
					"\tborder-style: none;\n" +
					"\tbackground-image: none;\n" +
					"\tbackground-color: @menu_bg_color;\n" +
					"\tcolor: @menu_fg_color;\n" +
					"\tbox-shadow: none;\n" +
					"\ttext-shadow: none;\n" +
					"\t-unico-inner-stroke-width: 0;\n" +
					"}\n\n" +
					".menu.button:hover,\n" +
					".menu.button:active,\n" +
					".menu.button:active:insensitive,\n" +
					".menu.button:insensitive,\n" +
					".menu.button {\n" +
					"\tbackground-color: @menu_bg_color;\n" +
					"\tbackground-image: none;\n" +
					"}\n\n" +
					"GtkTreeMenu .menuitem * {\n" +
					"\tcolor: @menu_fg_color;\n" +
					"}\n\n" +
					".menuitem,\n" +
					".menu .menuitem {\n" +
					"\tbackground-color: transparent;\n" +
					"}\n\n" +
					".menu .menuitem:active,\n" +
					".menu .menuitem:hover {\n" +
					"\tbackground-color: @theme_selected_bg_color;\n" +
					"}\n\n" +
					".menuitem.check,\n" +
					".menuitem.radio,\n" +
					".menuitem.check:hover,\n" +
					".menuitem.radio:hover,\n" +
					".menuitem.check:active,\n" +
					".menuitem.radio:active {\n" +
					"\tbackground-color: transparent;\n" +
					"}\n\n" +
					".menu .menuitem:insensitive,\n" +
					".menu .menuitem *:insensitive {\n" +
					"\tcolor: mix(@menu_fg_color,@menu_bg_color,0.5);\n" +
					"}\n\n" +
					".menuitem.arrow {\n" +
					"\tcolor: alpha(@menu_fg_color, 0.6);\n" +
					"}\n\n" +
					".menuitem .entry {\n" +
					"\tborder-color: shade(@menu_bg_color,0.7);\n" +
					"\tborder-image: none;\n" +
					"\tbackground-color: @menu_bg_color;\n" +
					"\tbackground-image: none;\n" +
					"\tcolor: @menu_fg_color;\n" +
					"}\n\n" +
					".menuitem .accelerator {\n" +
					"\tcolor: alpha(@menu_fg_color,0.6);\n" +
					"}\n\n" +
					".menuitem .accelerator:insensitive {\n" +
					"\tcolor: alpha(mix(@menu_fg_color,@menu_bg_color,0.5),0.6);\n" +
					"\ttext-shadow: none;\n" +
					"}\n\n" +
					".menuitem.separator {\n" +
					"\tbackground-color: transparent;\n" +
					"\tcolor: shade(@menu_bg_color, 0.9);\n" +
					"}\n\n" +
					".menuitem GtkCalendar,\n" +
					".menuitem GtkCalendar.button,\n" +
					".menuitem GtkCalendar.header,\n" +
					".menuitem GtkCalendar.view {\n" +
					"\tborder-color: shade(@menu_bg_color,0.8);\n" +
					"\tborder-image: none;\n" +
					"\tbackground-color: @menu_bg_color;\n" +
					"\tbackground-image: none;\n" +
					"\tcolor: @menu_fg_color;\n" +
					"}\n\n" +
					".menuitem GtkCalendar:inconsistent {\n" +
					"\tcolor: mix(@menu_fg_color,@menu_bg_color,0.5);\n" +
					"}\n\n" +
					"%s\n").printf (select_state1, selectbg_value, selectfg_value, select_state2, panel_state1, panelbg_value, panelfg_value, panel_state2, menu_state1, menubg_value, menufg_value, menu_state2);
			uint8[] data = text.data;
			long written = 0;
			while (written < data.length) {
				written += dos.write (data[written:data.length]);
			}
		} catch (Error e) {
			stderr.printf ("Gtk3 yapılandırması yazılamadı: %s\n", e.message);
		}
		try {
			var dos = new DataOutputStream (gtk2_config_file.replace (null, false, FileCreateFlags.REPLACE_DESTINATION));
			dos.put_string ("# Custom styles\n\n");
			string text = "%s\n%s".printf(panel_gtk2, menu_gtk2);
			uint8[] data = text.data;
			long written = 0;
			while (written < data.length) {
				written += dos.write (data[written:data.length]);
			}
		} catch (Error e) {
			stderr.printf ("Gtk2 yapılandırması yazılamadı: %s\n", e.message);
		}
	}

	void notify_change() {
		try {
			Process.spawn_command_line_async("notify-send -h int:transient:1 -i \"gtk-theme-config\" \"Changes applied.\" \"You might need to restart running applications.\"");
		} catch (Error e) {
			stderr.printf ("Bildirim görüntülenemiyor: %s\n", e.message);
		}
	}
}

class ThemeConfigApp : Gtk.Application {
	internal ThemeConfigApp () {
		Object (application_id: "org.themeconfig.app");
	}

	protected override void activate () {
		var window = new ThemeConfigWindow (this);
		window.show_all ();
	}
}

int main (string[] args) {
	return new ThemeConfigApp ().run (args);
}