1package tfe
2
3import (
4	"context"
5)
6
7// Compile-time proof of interface implementation.
8var _ TwilioSettings = (*adminTwilioSettings)(nil)
9
10// TwilioSettings describes all the Twilio admin settings.
11type TwilioSettings interface {
12	// Read returns the Twilio settings.
13	Read(ctx context.Context) (*AdminTwilioSetting, error)
14
15	// Update updates Twilio settings.
16	Update(ctx context.Context, options AdminTwilioSettingsUpdateOptions) (*AdminTwilioSetting, error)
17
18	// Verify verifies Twilio settings.
19	Verify(ctx context.Context, options AdminTwilioSettingsVerifyOptions) error
20}
21
22type adminTwilioSettings struct {
23	client *Client
24}
25
26// AdminTwilioSetting represents the Twilio settings in Terraform Enterprise.
27type AdminTwilioSetting struct {
28	ID         string `jsonapi:"primary,twilio-settings"`
29	Enabled    bool   `jsonapi:"attr,enabled"`
30	AccountSid string `jsonapi:"attr,account-sid"`
31	FromNumber string `jsonapi:"attr,from-number"`
32}
33
34// Read returns the Twilio settings.
35func (a *adminTwilioSettings) Read(ctx context.Context) (*AdminTwilioSetting, error) {
36	req, err := a.client.newRequest("GET", "admin/twilio-settings", nil)
37	if err != nil {
38		return nil, err
39	}
40
41	twilio := &AdminTwilioSetting{}
42	err = a.client.do(ctx, req, twilio)
43	if err != nil {
44		return nil, err
45	}
46
47	return twilio, nil
48}
49
50// AdminTwilioSettingsUpdateOptions represents the admin options for updating
51// Twilio settings.
52// https://www.terraform.io/docs/cloud/api/admin/settings.html#request-body-4
53type AdminTwilioSettingsUpdateOptions struct {
54	Enabled    *bool   `jsonapi:"attr,enabled,omitempty"`
55	AccountSid *string `jsonapi:"attr,account-sid,omitempty"`
56	AuthToken  *string `jsonapi:"attr,auth-token,omitempty"`
57	FromNumber *string `jsonapi:"attr,from-number,omitempty"`
58}
59
60// Update updates the Twilio settings.
61func (a *adminTwilioSettings) Update(ctx context.Context, options AdminTwilioSettingsUpdateOptions) (*AdminTwilioSetting, error) {
62	req, err := a.client.newRequest("PATCH", "admin/twilio-settings", &options)
63	if err != nil {
64		return nil, err
65	}
66
67	twilio := &AdminTwilioSetting{}
68	err = a.client.do(ctx, req, twilio)
69	if err != nil {
70		return nil, err
71	}
72
73	return twilio, nil
74}
75
76// AdminTwilioSettingsVerifyOptions represents the test number to verify Twilio.
77// https://www.terraform.io/docs/cloud/api/admin/settings.html#verify-twilio-settings
78type AdminTwilioSettingsVerifyOptions struct {
79	TestNumber *string `jsonapi:"attr,test-number"`
80}
81
82// Verify verifies Twilio settings.
83func (a *adminTwilioSettings) Verify(ctx context.Context, options AdminTwilioSettingsVerifyOptions) error {
84	req, err := a.client.newRequest("PATCH", "admin/twilio-settings/verify", &options)
85	if err != nil {
86		return err
87	}
88
89	return a.client.do(ctx, req, nil)
90}
91