pipeline {
    agent any
    stages {
        stage('Flutter Cleanup') {
            steps {
                sh '''flutter upgrade
flutter pub upgrade
flutter --version
flutter doctor
flutter clean'''
            }
        }

        stage('Build') {
            parallel {
                stage('Web Build') {
                    steps {
                        sh 'flutter build web --release --base-href /fbla/'
                    }
                }

                stage('Build Linux') {
                    steps {
                        sh 'flutter build linux --release'
                    }
                }

                stage('Build APK') {
                    steps {
                        sh 'flutter build apk --release'
                    }
                }

            }
        }

        stage('Deploy and Save') {
            parallel {
                stage('Deploy Web Local') {
                    steps {
                        script {
                            def remote = [
                                    name         : 'HostServer',
                                    host         : '192.168.0.216',
                                    user         : 'fbla',
                                    password     : 'fbla',
                                    allowAnyHosts: true,
                            ]
                            sshRemove(path: '/home/fbla/fbla-webserver/webfiles/fbla', remote: remote)
                            sshPut(from: 'build/web/', into: '/home/fbla/fbla-webserver', remote: remote)
                            sshCommand remote: remote, command: "mv /home/fbla/fbla-webserver/web /home/fbla/fbla-webserver/webfiles/fbla"
                        }

                    }
                }

                stage('Save Other Builds') {
                    steps {
                        script {
                            def remote = [
                                    name         : 'HostServer',
                                    host         : '192.168.0.216',
                                    user         : 'fbla',
                                    password     : 'fbla',
                                    allowAnyHosts: true,
                            ]
                            if (env.BRANCH_NAME == 'main') {
                                sshRemove(path: '/home/fbla/builds/main/linux', remote: remote)
                                sshCommand remote: remote, command: "mkdir /home/fbla/builds/main/linux"
                                sshPut(from: 'build/linux/x64/release', into: '/home/fbla/builds/main/linux', remote: remote)
                                sshCommand remote: remote, command: "mv /home/fbla/builds/main/linux/release/* /home/fbla/builds/main/linux"
                                sshCommand remote: remote, command: "rm -R /home/fbla/builds/main/linux/release/"
                                sshRemove(path: '/home/fbla/builds/main/apk', remote: remote)
                                sshCommand remote: remote, command: "mkdir /home/fbla/builds/main/apk"
                                sshPut(from: 'build/app/outputs/apk/release', into: '/home/fbla/builds/main/apk', remote: remote)
                                sshCommand remote: remote, command: "mv /home/fbla/builds/main/apk/release/* /home/fbla/builds/main/apk"
                                sshCommand remote: remote, command: "rm -R /home/fbla/builds/main/apk/release/"
                            } else {
                                sshRemove(path: '/home/fbla/builds/dev/linux', remote: remote)
                                sshCommand remote: remote, command: "mkdir /home/fbla/builds/dev/linux"
                                sshPut(from: 'build/linux/x64/release', into: '/home/fbla/builds/dev/linux', remote: remote)
                                sshCommand remote: remote, command: "mv /home/fbla/builds/dev/linux/release/* /home/fbla/builds/dev/linux"
                                sshCommand remote: remote, command: "rm -R /home/fbla/builds/dev/linux/release/"
                                sshRemove(path: '/home/fbla/builds/dev/apk', remote: remote)
                                sshCommand remote: remote, command: "mkdir /home/fbla/builds/dev/apk"
                                sshPut(from: 'build/app/outputs/apk/release', into: '/home/fbla/builds/dev/apk', remote: remote)
                                sshCommand remote: remote, command: "mv /home/fbla/builds/dev/apk/release/* /home/fbla/builds/dev/apk"
                                sshCommand remote: remote, command: "rm -R /home/fbla/builds/dev/apk/release/"
                            }
                        }

                    }
                }

            }
        }

        stage('Deploy Remote') {
            when {
                expression {
                    env.BRANCH_NAME == 'main'
                }

            }
            steps {
                script {
                    def remote = [
                            name         : 'MarinoDev',
                            host         : 'marinodev.com',
                            port         : 21098,
                            user         : 'mariehdi',
                            identityFile : '/var/jenkins_home/marinoDevPrivateKey',
                            passphrase   : 'marinodev',
                            allowAnyHosts: true,
                    ]
                    sshRemove(path: '/home/mariehdi/public_html/fbla', remote: remote)
                    sshPut(from: '/var/jenkins_home/workspace/fbla-ui_main/build/web/', into: '/home/mariehdi/public_html/', remote: remote)
                    sshCommand remote: remote, command: "mv /home/mariehdi/public_html/web /home/mariehdi/public_html/fbla"
                }

            }
        }

    }
}