//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//

using System;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo.Agent;
using SMO = Microsoft.SqlServer.Management.Smo;

namespace Microsoft.SqlTools.ServiceLayer.Agent
{
    internal class JobHelper
    {
        private JobHelper()
        {
        }

        private ServerConnection connection = null;
        private string jobName = string.Empty;
        private SMO.Server server = null;
        private Job job = null;

        //
        // ServerConnection object should be passed from caller,
        // who gets it from CDataContainer.ServerConnection
        //
        public JobHelper(ServerConnection connection)
        {
            this.connection = connection;
            server = new SMO.Server(connection);
        }

        public string JobName
        {
            get
            {
                return jobName;
            }
            set
            {
                if (server != null)
                {
                    Job j = server.JobServer.Jobs[value];
                    if (j != null)
                    {
                        job = j;
                        jobName = value;
                    }
                    else
                    {
                        throw new InvalidOperationException("Job not found");
                    }
                }
            }
        }

        public void Stop()
        {
            if (job != null)
            {
                job.Stop();
            }
        }

        public void Start()
        {
            if (job != null)
            {
                job.Start();
            }
        }

        public void Delete()
        {
            if (job != null)
            {
                job.Drop();

                //
                // you can't do anything with 
                // a job after you drop it!
                //
                job = null;
            }
        }

        public void Enable(bool enable)
        {
            if (job != null && job.IsEnabled != enable)
            {
                job.IsEnabled = enable;
                job.Alter();
            }
        }
    }
}
